XGameStreamingRegisterConnectionStateChanged
注册要在流式处理客户端设备的连接状态发生更改时调用的回调。 注册后,将为已连接的所有流式处理客户端设备调用回调。
语法
HRESULT XGameStreamingRegisterConnectionStateChanged(
XTaskQueueHandle queue,
void* context,
XGameStreamingConnectionStateChangedCallback* callback,
XTaskQueueRegistrationToken* token
)
参数
queue _In_opt_
类型:XTaskQueueHandle
要将更改回调置于其上的异步队列句柄。
context _In_opt_
类型:void*
指向传递到回调函数的上下文的可选指针。
callback _In_
类型:XGameStreamingConnectionStateChangedCallback*
将在任何流式处理客户端设备的连接状态发生更改时调用的回调函数。
token _Out_
类型:XTaskQueueRegistrationToken*
指向可用于从事件中取消注册的注册令牌的指针。
返回值
类型:HRESULT
如果成功,则返回 S_OK;否则返回错误代码。
可能的错误
错误代码 | 错误值 | 错误原因 |
---|---|---|
E_GAMESTREAMING_NOT_INITIALIZED | 0x89245400 | XGameStreaming 运行时尚未初始化。 在调用其他 API 之前,请先调用 XGameStreamingInitialize。 |
有关错误代码的列表,请参阅错误代码。
备注
注意
在时间敏感线程上调用此函数是不安全的。 有关详细信息,请参阅时间敏感线程。
建议使用此 API 按流式处理客户端设备进行游戏自定义,并维持允许游戏根据是否连接了任何设备来优化体验的状态。
注意
注册后,将为当前连接的所有流式处理客户端设备调用回调。
示例
// Called during game startup to hook into any game streaming start/stop events
void SetupStreamAware()
{
// Register a callback for client connections and disconnections. Note that the connection callback
// will fire for any already connected clients, so do all of our per-client setup in that callback.
XGameStreamingConnectionStateChangedRegistrationToken stateChangeToken = {0};
XGameStreamingRegisterConnectionStateChanged(
m_taskQueue, this, ConnectionStateChangedCallback, &stateChangeToken);
}
static void ConnectionStateChangedCallback(void* context, XGameStreamingClientId client, XGameStreamingConnectionState state)
{
static_cast<Game*>(context)->OnConnectionStateChanged(client, state);
}
void OnConnectionStateChanged(XGameStreamingClientId client, XGameStreamingConnectionState state)
{
switch (state)
{
case XGameStreamingConnectionState::Connected:
OnClientConnected(client);
break;
case XGameStreamingConnectionState::Disconnected:
OnClientDisconnected(client);
break;
default:
break;
}
}
void OnClientConnected(XGameStreamingClientId client)
{
// Update list of connected clients
m_streamingClients.push_back(client);
// Do per-client initialization
// ...
}
void OnClientDisconnected(XGameStreamingClientId client)
{
// Release our reference on the client that is no longer streaming the game
std::remove(m_streamingClients.begin(), m_streamingClients.end(), client);
// Do per-client cleanup
// ...
}
要求
头文件:xgamestreaming.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
XGameStreamingConnectionState
XGameStreamingConnectionStateChangedCallback
XGameStreamingUnregisterConnectionStateChanged
XGameStreaming