XGameStreamingRegisterClientPropertiesChanged
注册要在任何流式处理客户端设备的属性更改时调用的回调。
注意
注册后,将为客户端设备的当前客户端属性调用回调。
语法
HRESULT XGameStreamingRegisterClientPropertiesChanged(
XGameStreamingClientId client,
XTaskQueueHandle queue,
void* context,
XGameStreamingClientPropertiesChangedCallback* callback,
XTaskQueueRegistrationToken* token
)
参数
client _In_
类型:XGameStreamingClientId
正在注册以获取其回调的游戏流式处理客户端的 ID。
queue _In_opt_
类型:XTaskQueueHandle
要将更改回调置于其上的异步队列句柄。
context _In_opt_
类型:void*
将传递到回调函数的上下文的可选指针。
callback _In_
类型:XGameStreamingClientPropertiesChangedCallback*
将在客户端属性发生更改时调用的回调函数。
token _Out_
类型:XTaskQueueRegistrationToken*
指向可用于从事件中取消注册的注册令牌的指针。
返回值
类型:HRESULT
如果成功,则返回 S_OK;否则返回错误代码。
可能的错误
错误代码 | 错误值 | 错误原因 |
---|---|---|
E_GAMESTREAMING_NOT_INITIALIZED | 0x89245400 | XGameStreaming 运行时尚未初始化。 在调用其他 API 之前,请先调用 XGameStreamingInitialize。 |
E_GAMESTREAMING_CLIENT_NOT_CONNECTED | 0x89245401 | 指定客户端未连接。 |
有关错误代码的列表,请参阅错误代码。
备注
注意
在时间敏感线程上调用此函数是不安全的。 有关详细信息,请参阅时间敏感线程。
此 API 允许游戏在每当 XGameStreamingClientProperty(如流物理维度)发生更改时接收其 XGameStreamingClientPropertiesChangedCallback
。
注册将导致使用所有适用 XGameStreamingClientProperty
调用回调,以便可以完成对当前属性详细信息的查询。
当流式处理客户端设备断开连接时,请使用 XGameStreamingUnregisterClientPropertiesChanged 取消注册回调。
示例
// On client connection maintain a list of clients and do per client initialization
void GameStreamingClientManager::OnClientConnected(XGameStreamingClientId client)
{
StreamingClient connectedClient;
connectedClient.clientId = client;
connectedClient.propertiesChangedToken = token;
// Do per-client initialization
XGameStreamingClientPropertiesChangedRegistrationToken token = {0};
XGameStreamingRegisterClientPropertiesChanged(
client, m_taskQueue, this, &OnClientPropertiesChanged, &token);
connectedClient.propertiesChangedToken = token;
m_streamingClients.push_back(connectedClient);
}
// Some of the properties of our streaming client have changed, react to any of the changes which apply to our game
void GameStreamingClientManager::OnClientPropertiesChanged(
void* context,
XGameStreamingClientId client,
uint32_t updatedPropertiesCount,
XGameStreamingClientProperty* updatedProperties)
{
GameStreamingClientManager* gsClientManager = reinterpret_cast<GameStreamingClientManager*>(context);
for (uint32_t i = 0; i < updatedPropertiesCount; ++i)
{
switch (updatedProperties[i])
{
// The client now has a new physical size of the game stream - update our list of stream
// sizes to reflect this.
case XGameStreamingClientProperty::StreamPhysicalDimensions:
gsClientManager->UpdateClientPhysicalDimensions(client);
break;
case XGameStreamingClientProperty::TouchInputEnabled:
gsClientManager->UpdateClientTouchEnabled(client);
break;
default:
// A characteristic we are not tracking - do nothing
break;
}
}
}
要求
头文件:xgamestreaming.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
XGameStreamingClientProperty
XGameStreamingClientPropertiesChangedCallback
XGameStreamingUnregisterClientPropertiesChanged
XGameStreaming