

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# バックエンドサービスから手動でバックフィルリクエストを生成する
<a name="match-backfill-client"></a>

バックフィルリクエストをゲームサーバーから送信する代わりに、クライアント側のゲームサービスから送信できます。このオプションを使用するには、クライアント側のサービスがゲームセッションアクティビティとプレイヤー接続の現在のデータにアクセスできる必要があります。ゲームがセッションディレクトリサービスを使用している場合に適した選択です。

このトピックは、必要な FlexMatch コンポーネントを既に構築済みであり、マッチメーキングプロセスをゲームサーバーとクライアント側のゲームサービスに正常に追加済みであることを前提としています。FlexMatch のセットアップの詳細については、「[ロードマップ: Amazon GameLift Servers ホスティングソリューションにマッチメーキングを追加する](match-tasks.md)」を参照してください。

ゲームのマッチバックフィルを有効にするには、以下の機能を追加する必要があります。
+ マッチメーキングバックフィルリクエストをマッチメーカーに送信し、リクエストのステータスを追跡する。
+ ゲームセッションのマッチ情報を更新する。[ゲームサーバー上のマッチデータの更新](match-backfill-server-data.md)を参照してください 

他のクライアント機能と同様に、クライアント側のゲームサービスは Amazon GameLift Servers API で AWS SDK を使用します。この SDK は、C\+\+、C\#、およびその他いくつかの言語で使用できます。クライアント API の一般的な説明については、Amazon GameLift Servers サービス API リファレンスを参照してください。このリファレンスには、Amazon GameLift Servers 関連アクションの低レベルサービス API についての説明があり、言語固有のリファレンスガイドへのリンクが含まれています。

クライアント側のゲームサービスを設定してマッチしたゲームをバックフィルするには、次のタスクを完了します。

1. **バックフィルのリクエストをトリガーします。**一般的に、マッチされたゲームに 1 つ以上の空きプレイヤースロットがある場合はいつでも、ゲームによってバックフィルリクエストが開始されます。バックフィルリクエストを、重要なキャラクターの役割を埋めるためや、チームのバランスを取るためなどの特定の状況に結びつけることもできます。また、ゲームセッションの継続時間に基づいてバックフィルを制限することもできます。トリガーに使用したものが何であれ、少なくとも次の情報が必要になります。この情報は、ゲームセッション ID を指定して [DescribeGameSessions](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html) を呼び出すことで、ゲームセッションオブジェクト ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribeMatchmaking.html)) から取得できます。
   + *現在の空のプレーヤースロットの数。*この値は、ゲームセッションの最大プレイヤー制限と現在のプレイヤー数から計算できます。現在のプレーヤー数は、ゲームサーバーが Amazon GameLift Servers サービスと通信して、新しいプレイヤーの接続を検証したり、切断されたプレイヤーをレポートするたびに更新されます。
   + *作成ポリシー*。この設定は、ゲームセッションで現在新しいプレーヤーを受け入れているかどうかを示します。

    ゲームセッションオブジェクトには他にも、ゲームセッション開始時間、カスタムゲームプロパティ、マッチメーカーデータなどの有用な情報が含まれています。

1. **バックフィルリクエストを作成します。**マッチバックフィルリクエストを作成して FlexMatch マッチメーカーに送信するためのコードを追加します。バックフィルリクエストは、これらのクライアント API を使用して処理されます。
   + [StartMatchBackfill](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StartMatchBackfill.html)
   + [StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html)

   バックフィルリクエストを作成するには、次の情報を指定して `StartMatchBackfill` を呼び出します。バックフィルリクエストはマッチメーキングリクエスト (「[プレイヤーのマッチメーキングのリクエスト](match-client-start.md)」を参照) に似ていますが、既存のゲームセッションも特定します。バックフィルリクエストをキャンセルするには、バックフィルリクエストのチケット ID を指定して `StopMatchmaking` を呼び出します。
   + **チケット ID** - マッチメーキングチケット ID を供給します (または自動生成させることもできます)。同じメカニズムを使用して、マッチメーキングリクエストおよびバックフィルリクエストにもチケット ID を割り当てます。マッチメーキングおよびバックフィルのチケットも同じ方法で処理されます。
   + **マッチメイカー** - 使用するマッチメーキング設定の名前を特定します。一般的に、元のマッチの作成に使用したものと同じマッチメーカーをバックフィルに使用します。この情報は、マッチメーキング設定 ARN の下の、ゲームセッションオブジェクト ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)) の、`MatchmakerData` プロパティにあります。名前の値は「matchmakingconfiguration/」に続く文字列です。(例えば、ARN 値「value "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4」であれば、マッチメーキング設定名は「MM-4v4」です。) 
   + **ゲームセッション ARN** - バックフィルされるゲームセッションを指定します。ゲームセッションオブジェクトから `GameSessionId` プロパティを使用すると、この ID は必要な ARN 値を使用します。バックフィルリクエストのマッチメーキングチケット ([MatchmakingTicket](https://docs.aws.amazon.com/gamelift/latest/apireference/API_MatchmakingTicket.html)) には、処理中にゲームセッション ID がありますが、新しいマッチメーキングリクエストはマッチが成立するまでゲームセッション ID を取得しません。ゲームセッション ID があるかどうかが、新しいマッチのチケットとバックフィルのチケットを見分ける方法の 1 つです。
   + **プレイヤーデータ** - バックフィルするゲームセッション内のすべての現在のプレイヤーのプレイヤー情報 ([プレイヤー](https://docs.aws.amazon.com/gamelift/latest/apireference/API_Player.html))が含まれています。この情報により、マッチメーカーは現在ゲームセッション内にいるプレイヤーに対して最良のプレイヤーマッチを見つけることができます。各プレーヤーのチームメンバーシップを含める必要があります。バックフィルを使用していない場合は、チームを指定しないでください。ゲームサーバーがプレイヤー接続情報を正確にレポートしているなら、次のようにしてこのデータを取得できます。

     1. ゲームセッション ID を指定して [DescribePlayerSessions()](https://docs.aws.amazon.com/gamelift/latest/apireference/API_DescribePlayerSessions.html) を呼び出し、ゲームセッションに現在接続しているすべてのプレイヤーを検出します。各プレーヤーセッションにはプレイヤー ID が含まれます。ステータスフィルタを追加してアクティブなプレーヤーのみを取得できます。

     1. ゲームセッションオブジェクト ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)) の `MatchmakerData` プロパティからプレイヤーデータをプルします (「[マッチメーカーデータについて](match-server.md#match-server-data)」を参照)。前のステップで取得したプレイヤー ID を使用して、現在接続されているプレーヤーのみのデータを取得します。プレイヤーが切断された場合マッチメーカーのデータは更新されないため、現在のプレイヤーのみのデータを抽出する必要があります。

     1. プレイヤーレイテンシーについては、マッチメーカーがレイテンシーデータを呼び出す場合、新しいレイテンシー値をすべての現在のプレイヤーから収集し、それを `Player` オブジェクトに含めます。レイテンシールールが省略されマッチメーカーにレイテンシールールがある場合、リクエストは正常にマッチされません。バックフィルリクエストには、ゲームセッションが現在置かれているリージョンのレイテンシーデータのみが必要です。ゲームセッションのリージョンは `GameSession` オブジェクトの `GameSessionId` プロパティから取得できます。この値はリージョンを含む ARN です。

1. **バックフィルリクエストのステータスを追跡します。**マッチメーキングチケットのステータス更新をリッスンするコードを追加します。イベント通知 (推奨) またはポーリングを使用して、新しいマッチメーキングリクエストのチケットを追跡するセットアップのメカニズムを使用できます ([マッチメーキングイベントの追跡](match-client-track.md) を参照)。バックフィルリクエストでプレイヤーの承認アクティビティをトリガーする必要はなく、プレイヤー情報はゲームサーバーで更新されますが、チケットのステータスを追跡してリクエストの失敗や再送信を処理する必要はあります。

   マッチメーカーで処理できるゲームセッションからのマッチバックフィルリクエストは一度に 1 つだけです。リクエストをキャンセルする必要がある場合は、[StopMatchmaking](https://docs.aws.amazon.com/gamelift/latest/apireference/API_StopMatchmaking.html) を呼び出します。リクエストを変更する必要がある場合は、`StopMatchmaking` を呼び出してから、更新されたリクエストを送信します。

   マッチバックフィルリクエストが成功すると、ゲームサーバーは更新された `GameSession` オブジェクトを受信し、新しいプレイヤーがゲームセッションに参加するために必要なタスクを処理します。詳細については、「[ゲームサーバー上のマッチデータの更新](match-backfill-server-data.md)」を参照してください。