멀티 플레이어 관리자를 사용하여 게임을 시작하기 위한 프로토콜 활성화 처리
이 항목에서는 멀티 플레이어 관리자를 사용하여 프로토콜 활성화를 처리하는 방법에 대해 설명합니다.
활성화는 시스템이 다른 작업에 대한 응답으로 게임을 자동으로 시작하는 것입니다. 이는 일반적으로 플레이어가 다른 플레이어의 게임 초대를 수락할 때 수행됩니다.
타이틀은 다음과 같은 방법으로 프로토콜을 활성화할 수 있습니다.
- 사용자가 게임 초대를 수락합니다.
- 사용자가 플레이어의 게이머 카드에서 "게임 참여"를 선택합니다.
이 시나리오는 타이틀이 시작되고 플레이어가 로비에 참여하고 게임이 진행 중일 때(있는 경우) 프로토콜 활성화를 처리하는 방법을 다룹니다.
프로토콜 활성화 프로세스의 순서도는 프로토콜 활성화 처리(순서도)를 참조하세요.
플레이어가 게임 초대를 수락하거나 플레이어의 게이머 카드를 통해 친구의 게임에 참가하면, 프로토콜 활성화를 통해 플레이어의 장치에서 게임이 시작됩니다. 게임이 시작된 후 XGameInviteRegisterForEvent를 사용하여 초대 핸들을 가져옵니다. 초대 핸들을 사용하여 XblMultiplayerManagerJoinLobby를 호출합니다.
초대된 사용자가 XblMultiplayerManagerLobbySessionAddLocalUser를 통해 추가되지 않으면 XblMultiplayerManagerJoinLobby가 실패하고 JoinLobbyCompleted
이벤트와 함께 XblMultiplayerEventArgsXuid를 호출하여 초대가 전송된 xuid를 제공합니다.
로비에 참가한 후 로컬 구성원의 연결 주소와 구성원의 사용자 지정 속성을 설정하는 것이 좋습니다. 호스트가 없는 경우 XblMultiplayerManagerLobbySessionSetSynchronizedHost를 통해 호스트를 설정할 수도 있습니다.
마지막으로, 멀티 플레이어 관리자는 게임이 이미 진행 중이고 초대받은 사람을 위한 공간이 있는 경우 사용자를 게임 세션에 자동으로 참여시킵니다.
타이틀은 적절한 오류 코드와 메시지를 제공하는 JoinGameCompleted
이벤트를 통해 알립니다.
플랫 C API
#include <XTaskQueue.h>
#include <XGameInvite.h>
XTaskQueueHandle g_taskQueue;
XTaskQueueRegistrationToken g_gameInviteEventToken;
void OnGameInvite(void* context, const char* inviteUri)
{
if (inviteUri != nullptr)
{
std::string inviteString(inviteUri);
auto pos = inviteString.find("handle=");
auto inviteHandeId = inviteString.substr(pos + 7, 36);
// Now, call XblMultiplayerManagerJoinLobby.
}
}
void InitializeGame()
{
XGameInviteRegisterForEvent(g_taskQueue, nullptr, OnGameInvite, &g_gameInviteEventToken);
}
void ShutdownGame()
{
XGameInviteUnregisterForEvent(g_gameInviteEventToken);
}
HRESULT hr = XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress(
xblUserHandle, connectionAddress, context);
자세한 내용은 XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress를 참조하세요.
멀티 플레이어 관리자는 다음 기능을 수행합니다.
- 실시간 활동 및 멀티 플레이어 구독을 등록합니다.
- 로비 세션에 참여하세요.
- 기존 로비 상태 정리.
- 모든 로컬 플레이어를 활성 상태로 가입하세요.
- SDA(보안 디바이스 주소)를 업로드합니다.
- 멤버 속성을 설정합니다.
- 세션 변경 이벤트에 등록하세요.
- 로비 세션을 활성 세션으로 설정합니다.
- 게임 세션에 참여합니다(존재하는 경우).
- 전송 핸들을 사용하세요.