- 改訂の概要
- はじめに
- このドキュメントで使用される用語
- Multiplayer Session Directory
- MPSD セッション
- セッション テンプレートの属性
- 契約スキーマの更新
- セッション ドキュメントにおけるメンバー初期化
- マッチ チケット セッション
- Quality of Service (QoS) テンプレート
- QoS フェーズおよびセッション初期化の詳細
- XBOX Cloud Compute セッション
- Raw セッションおよびカスタム タイトル プロパティ
- アクティブ メンバーの減衰
- FAQ とトラブルシューティング
改訂の概要
現在のクライアント サイドの XBOX Services API (XSAPI) ライブラリは、MPSD サービスとの通信に契約バージョン 104 を使用しています。 このバージョンのドキュメントは、セッション テンプレート スキーマを、MPSD サービスがサポートする最新の契約バージョンである契約バージョン 107 に更新します。 バージョン 104 と 107 の間の変更点は、以下の 契約スキーマの更新 セクションでまとめられています。 契約バージョン 104 用に書かれたテンプレートは、107 として再公開する場合に更新が必要な点に注意してください。 ただし、サービスは下位互換性があるため、現在のライブラリを引き続き使用できます。将来のリリースで更新される予定です。 このドキュメントの前回の改訂では、サーバー セッションに関する情報を更新し、XSAPI と RESTful サービス呼び出しに関する新しいセクションを追加しました。 さらに、Query for Session State Information セクションの表が更新され、Quality of Service (QoS) Templates セクションも改訂されました。はじめに
マルチプレイヤー セッションは、Multiplayer Session Directory (MPSD) のクラウドに存在する安全なドキュメントであり、このドキュメントはゲームをプレイしている人々のグループを表します。 具体的には、マルチプレイヤー セッションには次の特性があります。- 各セッションには一意の URI があります。
- セッション ドキュメントには、現在のメンバー、ゲーム設定、ブートストラップ データ、およびゲーム サーバー情報が含まれています。
- タイトルは独自のセッションを作成および管理します。
- セッションはメンバー間の接続性を可能にします。
このドキュメントで使用される用語
Multiplayer Session Directory
MPSD は、オンライン プレイヤー間でセッション情報を調整するのに役立ち、タイトルを支援します。 マルチプレイヤー プレイのさまざまなタスクを達成するために、異なる種類のセッションを作成できます。 次の表は、XBOX 360 でそのようなタスクがどのように行われていたか、および XBOX One 以降 (PC を含む) でどのように達成されるかの違いを示しています。セッション パターン
-
ゲーム セッション
- プレイヤーの XUID、セキュア デバイス アドレス データ、およびプロパティ状態を持つセッション。これは実際のゲームプレイ セッションと考えられます。
- ピアツーピア、ピアツーホスト、ピアツーサーバー、またはハイブリッドにすることができます。
-
マッチ チケット セッション
- 一緒にプレイする他のプレイヤーを見つけるためにマッチメイキングに提出されるセッション。ゲームがさらにプレイヤーを探している場合は、ゲーム セッションもチケット セッションとして機能できることに注意してください。
-
サーバー セッション
- XBOX Compute 処理を通じて作成および使用されるゲーム セッション。
MPSD セッション
セッションは、関連するエンティティの 2 つのリストを保持します:- セッションに参加した、または招待されたメンバー (ユーザー)。
- セッションに参加したサーバー (クラウド サーバーまたは専用サーバー)。
- 作成時に設定された定数値。
- 変更可能なプロパティ。
- 読み取り専用のメタデータ。
XSAPI と RESTful サービス呼び出し
XBOX services の Sessions および Matchmaking サービスとインターフェースする方法は 2 つあります。- 標準の HTTPs 呼び出し
- XSAPI ラッパー
RESTful サービスへの標準 HTTPS 呼び出しを使用する
XBOX One 以降で、XBOX services の Sessions および Matchmaking サービスとインターフェースする最初の方法は、RESTful XBOX services URI への標準 HTTPS 呼び出しを使用することです。 これにより、タイトルはサーバーおよびゲームの構成に応じてこれらのサービスを呼び出しインターフェースする柔軟性が得られます。 これらの URI のリストについては、XBOX services RESTful リファレンス を参照してください。RESTful サービス用の XSAPI ラッパーを使用する
Sessions および Matchmaking サービスとインターフェースする 2 つ目の方法は、RESTful サービス URI のラッパーとして動作する XSAPI を使用することです。 これにより、各呼び出しに対して HTTPS トラフィックを処理することなく、コードで API を使用するより伝統的なアプローチが可能になります。 XSAPI の詳細については、xbox-live-api GitHub ページ を参照してください。 そのリファレンス ドキュメントには次のものが含まれています。- JSON Parsing API Reference - JSON パースの API のリファレンス資料。
- Windows.Web Namespace - Windows.Web 名前空間のメンバー。
- XBOX Compute SDK Reference - XBOX Compute 用のゲーム サーバー インスタンスを作成するための API。
MPSD セッションとテンプレート
MPSD セッションは、Partner Center を通じて取り込まれたテンプレートを使用して作成されます。 テンプレートは、作成されるセッションのフレームワークを定義する JSON ドキュメントです。 テンプレートは、新しいセッションのための定数を提供します。 以下は、テンプレート構成の例からの抜粋です。
SCID に対して構成されているテンプレートを確認する
セッション テンプレート
SCID 内に存在するセッション テンプレートのリスト、および特定のセッション テンプレートの詳細は、MPSD から取得できます。セッション状態情報をクエリする
セッションはサービス構成およびセッション テンプレート レベルでクエリできます:
結果はセッション参照の JSON 配列です。
一部のセッション データはインラインで含まれます。
注意 すべてのクエリには、keyword フィルタ、XUID フィルタ、またはその両方を含める必要があります。
private (プライベート セッションを返す) または reservations (ユーザーが参加していないセッションを返す) のいずれかを true に設定するには、呼び出し元がセッションへのサーバー レベルのアクセス権を持っているか、呼び出し元の XUID クレームが URI 内の XUID フィルタと一致する必要があります。
そうでない場合、403 Forbidden が返されます (そのようなセッションが実際に存在するかどうかにかかわらず)。
以下のコード抜粋は、クエリ応答の例を示しています。
セッション テンプレートの属性
契約スキーマの更新
このドキュメントの冒頭で述べたように、最新のセッション テンプレート契約バージョンは 107 で、以前のバージョンである 104 からスキーマにいくつかの変更が導入されています。 契約バージョン 104 用に書かれたテンプレートは、107 として再公開する場合に更新が必要です。 以下は変更点のまとめです。-
/constants/system/managedInitialization は /constants/system/memberInitialization に名称変更されます。
- autoEvaluate フィールドは externalEvaluation に名称変更され、極性が変わります (ただし、false はデフォルトのままです)。
- membersNeededToStart のデフォルト値が 2 から 1 に変更されます。
- joinTimeout のデフォルト値が 5 秒から 10 秒に変更されます。
- measurementTimeout のデフォルトが 5 秒から 30 秒に変更されます。
-
/constants/system/timeouts は削除され、タイムアウトは名前が変更され、/constants/system 配下に再配置されます。
- reserved タイムアウトは reservedRemovalTimeout になります。
- inactive タイムアウトは inactiveRemovalTimeout になり、新しいデフォルトは 2 時間ではなく 0 です。
- ready タイムアウトは readyRemovalTimeout になります。
- sessionEmpty タイムアウトは sessionEmptyTimeout になります。
- /constants/system/capabilities/gameplay は、直近プレイヤーおよび評判レポートを有効にするために、実際のゲームプレイを表すセッション (マッチやロビー セッションなどのヘルパー セッションとは対照的に) では true として指定する必要があります。
System オブジェクト
セッション ドキュメント内の各 system オブジェクトには、MPSD によって強制および解釈される固定スキーマがあります。 PUT リクエストの本文内では、system オブジェクトはカスタム オブジェクトと同じように検証およびマージされます。 ただし、カスタム オブジェクトとは異なり、マージ後に system オブジェクトはこれらのスキーマに基づいてさらに検証および処理されます。 /constants/systemタイムアウト
セッションは、タイマーおよびその他の外部イベントによって変更される可能性があります。 MPSD の Timeouts オブジェクトは、セッション ライフタイムおよびメンバーを管理するための基本的なメカニズムを提供します。 セッションの nextTimer フィールドは、次のタイマーの時刻を示します。 クライアントはこの情報を使用して、次のポーリングに適した間隔を選択できます。 この値は Expires HTTP ヘッダーでも返されます。 タイムアウトはミリ秒で指定されます。 0 が許可され、タイムアウトが即時であることを意味します。 指定されたタイムアウトが指定されていない場合は、無限と見なされます。 タイムアウトにはデフォルトがあるため、セッション テンプレートは無限タイムアウトを明示的に “null” として指定する必要があります。SessionEmptyTimeout
/constants/system/sessionEmptyTimeout の値は、セッションが空になってから削除されるまでのミリ秒数を構成します。 デフォルトは 0 で、セッションはすぐに削除されます。 値が指定されていない場合、空のセッションは無期限に存続します。メンバー タイムアウト
/constants/system 内の他の 3 つのタイムアウトは、メンバーが特定の状態にとどまれる時間を制御します。-
reservedRemovalTimeout
- タイムアウトが経過すると予約は削除されます。デフォルトは 30 秒です。
-
inactiveRemovalTimeout
- 非アクティブ メンバーは、デフォルトで 2 時間後にセッションから削除されます。
-
readyRemovalTimeout
- “ready” 状態のメンバーは、デフォルトで 3 分後に非アクティブ状態に戻ります。
セッション ドキュメントにおけるメンバー初期化
メンバー初期化
memberInitialization オブジェクトは、セッション作成後および/または新しいメンバーがセッションに参加する際の初期化ステージを制御します。 タイムアウトと初期化ステージは、任意のメトリックが設定されている場合の QoS 測定を含め、セッションによって自動的に追跡されます。 これらのタイムアウトは、initializationEpisode プロパティが設定されているメンバーに対して、セッションの reservation および ready タイムアウトをオーバーライドします。 例:
-
joiningTimeout
- ユーザーがセッションに参加するための時間 (ミリ秒単位)。参加できなかったメンバーの予約は削除されます。
-
measuringTimeout
- メンバーが測定値をアップロードする時間。測定値のアップロードに失敗したメンバーは、failureReason が “timeout” とマークされます。
-
evaluationTimeout
- メンバーが評価判定を行い、アップロードするための時間。判定が受信されなかった場合は失敗としてカウントされます。
- MPSD は、セッション テンプレートで提供される要件に基づいて自動 QoS 評価を実行できます。externalEvaluation が false に設定されている場合、評価が実行されます。evaluationTimeout が設定されている場合、externalEvaluation は true である必要があります。ピアツーピアまたはピアツーホストの要件が 2 つある場合でも、セッションが自動的に初期化を完了できるように externalEvaluation を false に設定する必要があります。
- これは、自動評価が成功するために、“initialize”:“true” が設定されて QoS をパスする必要があるメンバー予約の最小数です。
初期化エピソード
memberInitialization オブジェクトが設定されている場合、MPSD は初期化フェーズをエピソードごとに進めます。 最初のエピソードはセッションが作成されたときに開始され、テンプレートで定義されたすべてのフェーズを含みます。 エピソードが既に実行中に招待または参加した新しいメンバーは、次のエピソード用にマークされます。 エピソードや memberInitialization 全般の状態は、セッションの initializing オブジェクトから取得できます。 注意 このオブジェクトは初期化完了後に削除されることに注意してください。 例:マッチ チケット セッション
MPSD セッションがマッチ チケット セッションとして使用される場合、いくつかの特別なセッション プロパティおよび定数が使用されます。 /members//constants/systemQuality of Service (QoS) テンプレート
ゲーム セッション テンプレートには、MPSD にネットワーク レイヤーおよびコンソール ソーシャル機能と連携するように通知する値を追加できます。 この連携の目的は、セッションが作成される前、およびゲームに参加準備完了とユーザーに通知される前に、接続状態の品質を検証することです。 以下のコード抜粋は、QoS を使用したピアツーホスト ゲーム セッション テンプレートの例です。QoS セッション テンプレート属性
memberInitialization オブジェクトが設定されている場合、セッションはクライアント システムまたはタイトルがセッション作成後および/または新しいメンバーがセッションに参加する際に初期化を実行することを想定します。 タイムアウトと初期化ステージは、任意のメトリックが設定されている場合の QoS 測定を含め、セッションによって自動的に追跡されます。 これらのタイムアウトは、initializationEpisode プロパティが設定されているメンバーに対して、セッションの reservation および ready タイムアウトをオーバーライドします。QoS フェーズおよびセッション初期化の詳細
MPSD は、テンプレートがメンバー初期化を完了した後、ゲーム作成のための QoS 結果を追跡およびレポートします。 この操作の進行状況は、上記の メンバー初期化 セクションで説明したように、セッション ドキュメントの initializing オブジェクトによって表されます。 initializing オブジェクトには stage 属性があり、これは初期化の現在のステージを表します。 ステージは joining から measuring、evaluating へと進みます。- 初期化エピソード #1 が失敗した場合、ステージは failed に設定され、セッションは初期化できません。それ以外の場合、初期化エピソードが完了すると、“initializing” オブジェクトは削除されます。externalEvaluation が false に設定されている場合、evaluating ステージはスキップされます。metrics と measurementServerAddresses のどちらも設定されていない場合、measuring ステージはスキップされます。
- ホスト候補は、優先順に一覧表示されたデバイス トークンです。これらは、peerToHostRequirements が設定されており、/properties/system/host が設定されていない場合、初期化エピソード #1 の measuring ステージの後に設定されます。/properties/system/host オブジェクトが設定された後にクリアされます。
- gamertag 属性は、メンバーが受諾しており、そのメンバーの ゲーマータグ クレームが見つかった場合にのみ設定されます。
- deviceToken 属性は、メンバーがセキュア デバイス アドレスをアップロードするときに設定されます。等価比較に使用できる大文字と小文字を区別しない文字列です。
- reserved 値は、ユーザーがセッション ドキュメントに対する最初の PUT リクエストを実行した後に削除されます。プレイヤーが予約された状態のとき、それは彼らがゲーム セッションに招待されているが、まだ受諾もしていなければ接続も評価されていないことを意味します。
- メンバーがアクティブな場合、activeTitleId は、メンバーがアクティブになっているタイトルを 10 進数で示します。
- この属性は、ユーザーがセッションに参加した時刻を指します。reserved が true の場合、joinTime は予約が行われた時刻になります。
- このメンバーが properties/system/turn 配列に含まれている場合に存在し、そうでない場合は存在しません。
- initializationFailure 属性は、メンバーがそのステージを正常にパスしなかった場合、joining または measuring ステージから移行するときにメンバー オブジェクトに設定されます。優先順位順に、timeout、latency、bandwidthdown、bandwidthup、network、group、または episode に設定できます。 network 値は、ネットワーク構成および/または条件 (競合するネットワーク アドレス変換 [NAT] など) が QoS メトリックの測定を妨げたことを意味します。joining の終了時に唯一可能な値は group です。(joining のタイムアウトから、予約は削除されます。) episode 値は、joining または measuring ステージで失敗しなかった初期化エピソードのすべてのメンバーに対して、“evaluation” ステージが失敗した後に設定されます。
- memberInitialization が設定されており、メンバーが “initialize”: true で追加された場合、これはメンバーが参加する初期化エピソードに設定されます。作成時に新しいセッションに追加されたメンバーには 1 の値が使用されます。初期化エピソードが終了すると削除されます。
- next 属性は、セッション内の次のメンバーのインデックス値を表します。追加するメンバーがこれ以上ない場合、以下の membersInfo オブジェクト内の next 属性と同じ値になります。
XBOX Cloud Compute セッション (非推奨)
XBOX Cloud Compute セッションには、セッションがゲーム サーバーへの接続に使用できる大文字と小文字を区別しない接続文字列の順序付きリストが含まれます。 一般に、タイトルはリストの最初の文字列を使用する必要がありますが、洗練されたタイトルはカスタム メカニズム (たとえば、負荷に基づく) を使用して他のいずれかを選択できます。Raw セッションおよびカスタム タイトル プロパティ
セッションは、マルチプレイヤー ゲームに関するカスタム ハウスキーピング情報 (メタデータ) を保存するために使用できます。 ゲーム データや保存された情報は TMS++ に保存する必要があります。プロパティ バッグ
上記のプロパティ バッグとしてマークされたオブジェクトはそれぞれ、system と custom という 2 つのオプションの内部オブジェクトから構成されます。 custom オブジェクトには任意の JSON を含めることができます。アクティブ メンバーの減衰
MPSD がユーザーがタイトルに関与していないことを検出すると、アクティブ メンバーは自動的に非アクティブとマークされます。 これは、たとえば Presence がユーザー レコードをタイムアウトした場合に発生する可能性があります。 このメカニズムはあくまでバックストップです。つまり、タイトルはメンバーがタイトルから離れたり切り替えたり、サインアウトしたり、その他の方法で関与しなくなった場合に、それらのメンバーを非アクティブとしてマークする (またはセッションから削除する) ことを引き続き積極的に行う必要があります。FAQ とトラブルシューティング
MPSD を呼び出すにはどうすればよいですか?
証明書認証の使用: client-sessiondirectory.xboxlive.com 例:使用する SCID、セッション テンプレート、サンドボックスはどうやって調べればよいですか?
この情報は、タイトルの Partner Center で確認できます。 まだ Partner Center へのアクセス権をお持ちでない場合は、開発者アカウント マネージャーに連絡してください。情報を取得するお手伝いをします。自分のリクエスト本文と比較できるリクエスト本文の例はありますか?
MPSD を呼び出すと 404 エラーが発生します。
Fiddler トレースを収集して詳細情報を取得し、次を実行してください:-
HttpResponse 本文の一部として返されたメッセージで、一般的な 404 メッセージを確認します。
- The requested service config is either invalid or not configured for sessions。使用されている SCID が正しいことを確認します。
- The requested session wasn’t found。取得する前にセッションが作成されており、セッション テンプレートが正しいことを確認します。PUT 呼び出しでセッションを作成できます。
- 使用している URI を確認します。
- コンソールを再起動するか、新しいユーザーで再試行します。
MPSD を呼び出すと 403 エラーが発生します。
これは通常、権限またはスコープの問題です。 Fiddler トレースを収集して詳細情報を取得し、次を実行してください:- HttpResponse 本文の一部として返されたメッセージで、一般的な 403 メッセージを確認します。
-
The requested service config cannot be accessed.
- サンドボックスにアクセス権を持つアカウントを使用していることを確認します。
- 正しいサンドボックス内にいることを確認します。
- 証明書認証を使用していてこのエラーが発生した場合は、DAM に連絡してください。
-
The requested session cannot be accessed. Private Sessions can only be read by members of the session.
- 可視性が “private” のセッションにアクセスしようとしています。セッション内のメンバーのみがセッション ドキュメントを読むことができます。
-
The request body can’t contain existing member references unless the authentication principal includes a server.
- ユーザーの代わりに他のユーザーをセッションに参加させることはできません。招待のみ可能です。プレイヤーを招待するには、インデックスを “reserve_<number>” に設定します。
