다음을 통해 공유


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