XUserGetSignOutDeferral
로그아웃 지연에 대한 핸들을 검색합니다. 이 API는 PC에서 지원되지 않으며 E_GAMEUSER_DEFERRAL_NOT_AVAILABLE 반환합니다.
구문
HRESULT XUserGetSignOutDeferral(
XUserSignOutDeferralHandle* deferral
)
매개 변수
deferral _Out_
형식: XUserSignOutDeferralHandle*
로그아웃 지연에 대한 핸들을 포함합니다.
반환 값
형식: HRESULT
HRESULT 성공 또는 오류 코드입니다.
반환 코드 | 설명 |
---|---|
S_OK | 작업이 성공했습니다. |
E_GAMEUSER_DEFERRAL_NOT_AVAILABLE | 로그아웃 지연을 제공할 수 없습니다. |
비고
참고 항목
이 API는 게임의 microsoftgame.config에서 configVersion이 "0"이고 E_GAMEUSER_DEFERRAL_NOT_AVAILABLE을 반환하는 경우 PC에서 지원되지 않습니다. 2022년 6월 GDK부터 이 API는 microsoftgame.config에 다음이 모두 있는 경우 PC에서 지원됩니다.
- configVersion이 1임
- 타이틀 ID를 지정합니다
- MSA 앱 ID를 지정합니다.
로그아웃 지연을 얻으려면, XUserChangeEvent가 XUserChangeEvent::SigningOut일 때 XUserChangeEventCallback을 호출합니다. SigningOut 이벤트 중에는 지연을 이용하지 못할 수도 있습니다. 지연을 획득하면, 사용자는 지연이 모두 완료되거나 제한 시간이 경과하기 전에는 로그인 상태를 유지합니다.
다음 예제에서는 사용자 변경 이벤트를 처리하는 방법을 보여줍니다.
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
라이브러리: xgameruntime.lib
지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔