

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

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

ゲームセッションをホストしているゲームサーバープロセスから、手動でマッチバックフィルリクエストを開始できます。サーバープロセスは、ゲームに接続しているプレイヤーや空きプレイヤースロットの状況に関する最新情報を保持しています。

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

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

他のサーバー機能と同様に、ゲームサーバーは Amazon GameLift Servers Server SDK 機能を使用します。この SDK は C\+\+ および C\# で使用できます。

ゲームサーバーからマッチバックフィルリクエストを作成するには、次のタスクを完了します。

1. **マッチバックフィルリクエストをトリガーします。**一般的に、マッチされたゲームに 1 つ以上の空きプレイヤースロットがある場合はいつでも、バックフィルリクエストを開始できます。バックフィルリクエストを、重要なキャラクターの役割を埋めるためや、チームのバランスを取るためなどの特定の状況に結びつけることもできます。また、ゲームセッションの継続時間に基づいてバックフィルアクティビティを制限することもできます。

1. **バックフィルリクエストを作成します。**マッチバックフィルリクエストを作成して FlexMatch マッチメーカーに送信するためのコードを追加します。バックフィルリクエストは、これらのサーバー API を使用して処理されます。
   + [StartMatchBackfill()](https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-startmatchbackfill)
   + [StopMatchBackfill()](https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-stopmatchbackfill)

   バックフィルリクエストを作成するには、次の情報を指定して `StartMatchBackfill` を呼び出します。バックフィルリクエストをキャンセルするには、バックフィルリクエストのチケット ID を指定して `StopMatchBackfill` を呼び出します。
   + **チケット ID** - マッチメーキングチケット ID を供給します (または自動生成させることもできます)。同じメカニズムを使用して、マッチメーキングリクエストおよびバックフィルリクエストにもチケット ID を割り当てます。マッチメーキングおよびバックフィルのチケットも同じ方法で処理されます。
   + **マッチメイカー** - バックフィルリクエストに使用するマッチメーカーを特定します。一般的に、元のマッチの作成に使用したものと同じマッチメーカーを使用します。このリクエストはマッチメーキング設定 ARN を取ります。この情報は、ゲームセッションをアクティブ化した際に Amazon GameLift Servers によってサーバープロセスに提供されたゲームセッションオブジェクト ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html)) に保存されます。マッチメーキング設定 ARN は `MatchmakerData` プロパティに含まれています。
   + **Game session ARN** - バックフィルされるゲームセッションを特定します。ゲームセッション ARN はサーバー API [GetGameSessionId()](https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk-cpp-ref-actions.html#integration-server-sdk-cpp-ref-getgamesessionid) を呼び出して取得できます。マッチメーキングプロセス中は、新しいリクエストのチケットにはゲームセッション ID がありません。一方、バックフィルリクエストのチケットにはあります。ゲームセッション ID があるかどうかが、新しいマッチのチケットとバックフィルのチケットを見分ける方法の 1 つです。
   + **プレイヤーデータ** - バックフィルするゲームセッション内のすべての現在のプレイヤーのプレイヤー情報 ([プレイヤー](https://docs.aws.amazon.com/gamelift/latest/apireference/API_Player.html))が含まれています。この情報により、マッチメーカーは現在ゲームセッション内にいるプレイヤーに対して最良のプレイヤーマッチを見つけることができます。各プレーヤーのチームメンバーシップを含める必要があります。バックフィルを使用していない場合は、チームを指定しないでください。ゲームサーバーがプレイヤー接続情報を正確にレポートしているなら、次のようにしてこのデータを取得できます。

     1. ゲームセッションをホストしているサーバープロセスには、現在どのプレイヤーがゲームセッションに接続しているかについての最新情報があります。

     1. プレイヤー ID、属性、およびチームの割り当てを取得するには、ゲームセッションオブジェクト ([GameSession](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GameSession.html) の `MatchmakerData` プロパティからプレイヤーデータを抽出します (「[マッチメーカーデータについて](match-server.md#match-server-data)」を参照)。マッチメーカーデータには、ゲームセッションにマッチされたことのあるすべてのプレイヤーが含まれています。そのため、現在接続しているプレイヤーのみのプレイヤーデータをプルする必要があります。

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

1. **バックフィルリクエストのステータスを追跡します。**Amazon GameLift Servers は Server SDK コールバック関数 `onUpdateGameSession` を使用して、バックフィルリクエストのステータスでゲームサーバーを更新します(「[サーバープロセスの初期化](https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-initialize)」を参照)。ステータスメッセージ (およびバックフィルリクエスト[ゲームサーバー上のマッチデータの更新](match-backfill-server-data.md) が成功した結果として更新されたゲームセッションオブジェクト) を処理するコードを追加します。

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