ロビーへの招待
この記事では、ロビーへの招待の概要と、ロビーとマッチメイキング SDK でロビー招待を使用する方法について説明します。
注: プレイヤー (つまり、title_player_account PlayFab エンティティ) のみが招待を送受信できます。 ゲーム サーバー (つまり、game_server PlayFab エンティティ) はできません。 ゲーム サーバーがロビーとやり取りする方法の詳細については、「ゲーム サーバーとロビー」を参照してください。
招待の種類
ゲームで使用される可能性が高い招待は 2 種類あります。
ゲーム内招待によるロビーへの参加
- ロビーのメンバーは、ロビー サービスを介して別のプレイヤーをそのロビーに直接招待できます。
- この招待は、ロビーの接続文字列を招待されたプレイヤーと共有します。
- 招待されたプレイヤーは、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
}