ロビーへの招待

この記事では、ロビーへの招待の概要と、ロビーとマッチメイキング SDK でロビー招待を使用する方法について説明します。

注: プレイヤー (つまり、title_player_account PlayFab エンティティ) のみが招待を送受信できます。 ゲーム サーバー (つまり、game_server PlayFab エンティティ) はできません。 ゲーム サーバーがロビーとやり取りする方法の詳細については、「ゲーム サーバーとロビー」を参照してください。

招待の種類

ゲームで使用される可能性が高い招待は 2 種類あります。

  1. ゲーム内招待
  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
}

関連項目