로비 초대
이 문서에서는 로비 초대에 대한 개요와 로비 및 매치메이킹 SDK에서 이를 사용하는 방법을 설명합니다.
참고: 플레이어(즉, title_player_account PlayFab 엔터티)만 초대를 보내거나 받을 수 있습니다. 게임 서버(즉, game_server PlayFab 엔터티)는 할 수 없습니다. 게임 서버가 로비와 상호 작용하는 방식에 대한 자세한 내용은 게임 서버 및 로비를 참조하세요.
초대 유형
게임에서 사용할 수 있는 두 가지 유형의 초대가 있습니다.
게임 내 초대로 로비에 참여하기
- 로비의 구성원은 로비 서비스를 통해 다른 플레이어를 해당 로비에 직접 초대할 수 있습니다.
- 이 초대는 초대된 플레이어와 로비의 연결 문자열을 공유합니다.
- 초대된 플레이어는 PFLobbyInviteReceivedStateChange를 통해 초대를 받고 첨부된 연결 문자열을 사용하여 로비에 참여할 수 있습니다.
- 이러한 초대는 플랫폼 간 작동하지만 게임 내에서만 작동합니다.
플랫폼 초대로 로비에 참여하기
- 로비의 구성원은 플랫폼별 초대 메커니즘을 통해 로비의 연결 문자열을 다른 플레이어와 직접 공유할 수 있습니다.
- 이러한 초대는 플랫폼 간 작동하지 않지만 받는 사람이 이미 게임을 실행하지 않고도 받을 수 있습니다.
- 초대된 플레이어가 플랫폼 메커니즘을 통해 연결 문자열을 받으면 첨부된 연결 문자열을 사용하여 로비에 참가할 수 있습니다.
로비 및 매치메이킹 SDK를 사용하여 초대를 보내고 받는 예
초대 수신자에서 PFMultiplayerStartListeningForLobbyInvites를 사용하여 게임 내 초대를 받을 수 있습니다.
초대 수신자는 성공적으로 설정되면 상태를 수신 중으로 변경합니다.
HRESULT AllowInvitations(
const PFEntityKey* entity)
{
return PFMultiplayerStartListeningForLobbyInvites(g_pfmHandle, entity);
}
void HandleInvitationListenerStatusChange(
const PFLobbyInvitationListenerStatusChangedStateChange& invitationListenerStateChange)
{
PFLobbyInvitationListenerStatus status;
HRESULT hr = PFMultiplayerGetLobbyInvitationListenerStatus(
g_pfmHandle,
&invitationListenerStateChange.listeningEntity,
&status);
assert(SUCCEEDED(hr));
switch (status)
{
case PFLobbyInvitationListenerStatus::Listening:
{
Log("%s is listening for invitations", invitationListenerStateChange.listeningEntity.id);
break;
}
case PFLobbyInvitationListenerStatus::NotAuthorized:
{
Log("Invitation listener not authorized!"); // this is likely an issue with the listener's entity token.
break;
}
default:
}
}
PFLobbySendInvite를 사용하여 로비 서비스를 통해 다른 PlayFab 사용자에게 초대를 보냅니다.
수신자는 PFLobbyInviteReceivedStateChange를 받게 됩니다.
HRESULT SendInvite(PFLobbyHandle lobby, const PFEntityKey* sender, const PFEntityKey* receiver)
{
return PFLobbySendInvite(lobby, sender, receiver, nullptr);
}
void HandleInvitationNotification(const PFLobbyInviteReceivedStateChange& invite)
{
Log("%s invited to lobby by %s", invite.listeningEntity.id, invite.invitingEntity.id);
// pass invite.connectionString to PFMultiplayerJoinLobby
}