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 reconnecte ensuite.
Pour surveiller les modifications de l’état ou des informations d’un utilisateur, abonnez-vous à XUserChangeEvent.
Appelez la fonction XUserRegisterForChangeEvent pour vous abonner à XUserChangeEvent.
La fonction XUserRegisterForChangeEvent accepte comme argument un pointeur vers un rappel XUserChangeEventCallback. La fonction retourne le pointeur vers le rappel.
Le rappel XUserChangeEventCallback prend comme argument une énumération XUserChangeEvent.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); }}