大厅邀请

本文概述了大厅邀请以及如何在大厅和匹配 SDK 中使用它们。

注意:只有玩家(即 title_player_account PlayFab 实体)才能发送或接收邀请。 游戏服务器(即 game_server PlayFab 实体)无法进行此操作。 有关游戏服务器如何与大厅交互的详细信息,请参阅游戏服务器和大厅

邀请类型

你的游戏可能会使用两种类型的邀请。

  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
}

另请参阅