L’utilisateur est de nouveau connecté. Cela se produit uniquement si le jeu conserve le XUserHandle après la déconnexion de l’utilisateur et que ce même utilisateur se connecte de nouveau.
Pour surveiller les modifications de l’état ou des informations de l’utilisateur, abonnez-vous à XUserChangeEvent.
Appelez la fonction XUserRegisterForChangeEvent pour vous abonner à XUserChangeEvent.
La fonction XUserRegisterForChangeEvent accepte un pointeur vers un rappel XUserChangeEventCallback comme argument. La fonction retourne le pointeur vers le rappel.
Le rappel XUserChangeEventCallback prend une énumération XUserChangeEvent comme argument.L’exemple suivant montre comment gérer les événements de modification d’utilisateur.
HRESULT RegisterForChanges(){ RETURN_HR_IF(E_UNEXPECTED, _token.token != 0); RETURN_IF_FAILED(XUserRegisterForChangeEvent( _queue, this, UserChangeEventHandler, &_token)); return S_OK;}void UnregisterForChanges(){ XUserUnregisterForChangeEvent(_token, false); _token.token = 0;}void UserChangeEventHandler( XUserLocalId userLocalId, XUserChangeEvent event){ auto iter = std::find_if( _users.begin(), _users.end(), [&userLocalId](const User& candidate) { XUserLocalId candidateUserLocalId; XUserGetLocalId(candidate.Handle(), &candidateUserLocalId); return candidateUserLocalId == userLocalId; }); // User not known if (iter == _users.end()) { return; } auto handle = iter->Handle(); // If a guest gets signed out, immediately close the handle bool isGuest; if (SUCCEEDED_LOG(XUserGetIsGuest(handle, &isGuest)) && isGuest && event == XUserChangeEvent::SignedOut) { _users.erase(iter); } if (event == XUserChangeEvent::SigningOut) { // Delay the user signing out just for fun XUserSignOutDeferralHandle deferral; if (SUCCEEDED_LOG(XUserGetSignOutDeferral(&deferral))) { // Hold the deferral for 5 seconds then close it std::thread completeDeferralThread( [deferral]() { std::this_thread::sleep_for(std::chrono::milliseconds(5000)); XUserCloseSignOutDeferralHandle(deferral); }); completeDeferralThread.detach(); } } if (event == XUserChangeEvent::GamerPicture) { iter->LoadGamerPicAsync(_queue); }}