Multiplayer Manager を使用してゲームを開始するためのプロトコル アクティベーションの処理

このトピックでは、Multiplayer Manager を使用してプロトコルのアクティブ化を処理する方法について説明します。

アクティブ化とは、システムが別のアクションに応答してゲームを自動的に開始することです。 これは通常、プレーヤーが別のプレーヤーからのゲームへの招待を受け入れるときに行われます。

タイトルは、次の方法でアクティブ化されたプロトコルを取得できます。

  • ユーザーがゲームへの招待を受け入れたとき。
  • ユーザーがプレーヤーのゲーマー カードから "ゲームの参加" を選択したとき。

このシナリオでは、タイトルが起動され、プレーヤーがロビーに参加し、ゲームが進行中 (存在する場合) のときにプロトコルのアクティブ化を処理する方法について説明します。

プロトコルのアクティブ化プロセスのフローチャートについては、「プロトコルのアクティブ化を処理する (フローチャート)」を参照してください。

プレイヤーがゲームの招待を受け入れたとき、またはプレイヤーのゲーマーカードからフレンドのゲームに参加したとき、プロトコルのアクティブ化を使用してプレイヤーのデバイスでゲームが起動されます。 ゲームの開始後、XGameInviteRegisterForEvent を使用して、招待ハンドルを入手します。 招待ハンドルを使用して、XblMultiplayerManagerJoinLobby を呼び出します。

招待されたユーザーが XblMultiplayerManagerLobbySessionAddLocalUser によって追加されていない場合 XblMultiplayerManagerJoinLobby はエラー終了し、JoinLobbyCompleted イベントで XblMultiplayerEventArgsXuid を呼び出すことにより、招待の送信先の xuid を提供します。

ロビーに参加した後、ローカル メンバーの接続アドレスとメンバーのカスタム プロパティを設定することを推奨します。 ホストが存在しない場合は XblMultiplayerManagerLobbySessionSetSynchronizedHost 経由で設定することもできます。

最後に、ゲームが既に進行中であり、招待されたユーザーを受け入れる余裕がある場合、Multiplayer Manager はユーザーをゲーム セッションに自動的に参加させます。 タイトルには、適切なエラー コードとメッセージを提供する 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 を参照してください。

Multiplayer Manager は、次の機能を実行します。

  • リアルタイム アクティビティとマルチプレイヤー サブスクリプションを登録します。
  • ロビー セッションに参加します。
  • 既存のロビー状態のクリーンアップ。
  • すべてのローカル プレイヤーをアクティブとして参加させます。
  • セキュリティで保護されたデバイスのアドレス (SDA) をアップロードします。
  • メンバーのプロパティを設定します。
  • セッション変更イベントに登録します。
  • ロビー セッションをアクティブ セッションとして設定します。
  • ゲーム セッションに参加します (存在する場合)。
  • 転送ハンドルを使用します。