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