XUserChangeEvent
사용자 변경 이벤트의 유형을 지정합니다.
구문
enum class XUserChangeEvent : uint32_t
{
SignedInAgain = 0,
SigningOut = 1,
SignedOut = 2,
Gamertag = 3,
GamerPicture = 4,
Privileges = 5,
}
상수
상수 | 설명 |
---|---|
SignedInAgain | 사용자가 다시 로그인되었습니다. 사용자가 로그아웃한 다음, 같은 사용자가 한 번 더 로그인한 후에도 게임이 XUserHandle을 보유하는 경우에만 발생합니다. |
SigningOut | 사용자가 로그아웃하는 중입니다. |
SignedOut | 사용자가 로그아웃되었습니다. |
Gamertag | 사용자의 게이머 태그가 변경되었습니다. |
GamerPicture | 사용자의 게이머 사진이 변경되었습니다. |
권한 | 사용자의 권한이 변경되었습니다. |
비고
사용자 상태나 사용자 정보 변경 사항을 모니터링하려면, XUserChangeEvent를 구독합니다. XUserRegisterForChangeEvent 함수를 호출하여 XUserChangeEvent를 구독합니다. XUserRegisterForChangeEvent 함수는 XUserChangeEventCallback 콜백 인수에 대한 포인터를 받아들입니다. 함수는 콜백에 대한 포인터를 반환합니다. XUserChangeEventCallback 콜백은 XUserChangeEvent 열거형을 인수로 취합니다.
다음 예제에서는 사용자 변경 이벤트를 처리하는 방법을 보여줍니다.
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);
}
}
요구 사항
헤더: XUser.h
지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔