> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# LocalMultiplayerAgent を使用したプロセスベースのゲームサーバーのデバッグ

> 既存のサーバーをラップし、LocalMultiplayerAgent のプロセス（非コンテナ）モードで実行することで、PlayFab マルチプレイヤーゲームサーバーをローカルでデバッグします。

# LocalMultiplayerAgent を使用してプロセスモードでゲームサーバーを実行する方法

このチュートリアルでは、次の手順について説明します。

* Wrapper サンプルを使用したビルドの作成
* MultiplayerSettings.json の構成
* LocalMultiplayerAgent の実行
* ゲーム接続のテスト

## ゲームビルドの作成

LocalMultiplayerAgent (LMA) を使用してゲームサーバーをテストするには、ゲームビルドを作成し、アーカイブ形式で保存する必要があります。
より簡単にするために、手順と PowerShell スクリプトを含む Wrapper サンプルを提供しています。

次に、「[wrapper アプリを使用して既存のゲームサーバーをラップする](https://github.com/PlayFab/MpsSamples/tree/main/wrappingGsdk#wrapping-an-existing-game-server-using-the-wrapper-app)」の手順に従い、このチュートリアル用にゲームサーバーを準備します。

## MultiplayerSettings.json の構成

LMA ツールセットを解凍したフォルダーに移動し、MultiplayerSettings.json ファイルを開きます。このファイルは、MPS 上のビルドをシミュレートするビルド構成のモックファイルです。

[LMA MultiplayerSettings.json Generator](https://github.com/PlayFab/MpsAgent/tree/main/LocalMultiplayerAgent/SettingsJsonGenerator) を使用して json を作成できます。
Generator は、選択したオプションに基づいて json を生成するシンプルな Web ページです。Generator は LMA の解凍済みフォルダー内にあります。

以下は、プロセスモードで LMA を実行するための Wrapper サンプル用 MultiplayerSettings.json の例です。

```json theme={null}
{
  "RunContainer": false, // Set RunContainer to false if you are running LMA in Process mode.
  "OutputFolder": "C:\\output\\WindowProcess", // Path where config files and logs will be generated from LMA at each run
  "NumHeartBeatsForActivateResponse": 10, // default value
  "NumHeartBeatsForTerminateResponse": 60, // default value
  //the server will run in stand-by mode for 10 heartbeats and stay in active state for 35 heartbeats.
  "TitleId": "59F84", // default value
  "BuildId": "8624d52e-87a1-4a12-b7f6-b92720ef8919", // default value
  "Region": "EastUs", // default value
  "AgentListeningPort": 56001, // default value
  "AssetDetails": [
    {
      "MountPath": "",  // Mount Path is only required for Container mode. leave it as blank.
      "SasTokens": null,
      "LocalFilePath": "D:\\gameassets.zip" // where your game server is located as an archive format.
    }
  ],
  "ProcessStartParameters": {
    "StartGameCommand": "wrapper.exe -g fakegame.exe arg1 arg2" 
    // shell command to run Wrapper. Command will be executed where game asset is extracted.
    // Make sure the StartGameCommand provided above is an example of the Wrapper sample. 
  },
  "PortMappingsList": [
    [
      {
        "NodePort": 56100, // default value
        "GamePort": {
          "Name": "game_port",
           // Port name is already defined in the Wrapper sample. Wrapper will grab the port information using game_port via GSDK while it's running.
          "Protocol": "TCP"
        }
      }
    ]
  ],
}

```

プロセスモードで LMA を実行するには、MultiplayerSettings.json の次のフィールドを正しく更新してください。

* `LocalFilePath` - 先ほど作成したゲームサーバーのアセット zip ファイルへのフル ローカル パス（ワークステーション上）。例: D:\MyAmazingGame\asset.zip（JSON フォーマットではバックスラッシュをエスケープする必要があることに注意してください）。

* `StartGameCommand` - プロセスの StartGameCommand パスは相対パスです。作業ディレクトリはゲームアセットが解凍される場所となります。

* `PortMappingsList` - 実行中のゲームで使用可能なポートです。
  * `NodePort` はワークステーション上で開かれるポートです。

  * `GamePort.Number` はプロセスモードでは必要ありません。ゲームサーバーの実行中に、GSDK 経由でポート番号が Node Port にバインドされます。実際のシナリオでは、MPS が各プロセスベースのゲームセッションごとに動的にポートをバインドします。

  * `GamePort.Name` はゲームサーバーで定義したものと同じ値に設定してください。実行時に、キー GamePort.Name で GSDK 構成の値を確認できます。Wrapper サンプルを使用している場合、ポート名は既に "game\_port" として定義されているので、ここでも同じ値を設定する必要があります。

  * `GamePort.Protocol` - プロトコル タイプを指定します: TCP または UDP

* `OutputFolder` - 出力と構成ファイルが生成されるドライブまたはフォルダーへのパス。ゲームサーバーがこのパスの下に解凍されるため、十分な空き容量があることを確認してください。指定しない場合、agent フォルダーが使用されます。

* `AgentListeningPort` - これは LMA がゲームサーバーと通信するためのポートです。空いているポートであれば何でも使えますが、デフォルト値は 56001 です。他のプロセスが 56001 にバインドされている場合は、この値を変更するか、ポート 56001 上の他のプロセスを終了する必要があります。

* `ResourceLimits` - プロセスモードでは必要ありません。

* `MountPath` - プロセスモードでは必要ありません。

* `SessionCookie` (オプション) - RequestMultiplayerServer API 呼び出しの一部としてゲームサーバーに渡されるセッション Cookie。MPS の実際のシナリオでは、接続が確立された後、サーバーはクライアントに SessionCookie から対応するリソースを読み込むよう通知します。

## LocalMultiplayerAgent の実行

これで LocalMultiplayerAgent を実行する準備ができました。

* PowerShell ウィンドウで:
  LocalMultiplayerAgent.exe を含む LMA 配下のディレクトリに移動します。

* `LocalMultiplayerAgent.exe` を実行します。
  この時点で、LMA は http リスナーをセットアップし、ゲームアセットを解凍し、別プロセスとしてゲームサーバーを起動します。

  > プロセスとしてゲームサーバーを実行している場合、指定した NodePort へのトラフィックを許可するかどうかを尋ねる Windows Firewall のポップアップが表示される場合があります。これを避けたい場合、LocalMultiplayerAgent を管理者モードで実行するか、ファイアウォールでポートを有効にすることができます。

LMA は、ゲームサーバーに統合された GSDK からのハートビートを待機します。
GSDK が正しく統合されていれば、LMA は次の順序で出力を表示します。

1. `CurrentGameState - Initializing`
   （ゲームサーバーが GSDK::ReadyForPlayers を直接呼び出し、GSDK::Start を呼び出さない場合、これは表示されないことがあります）
2. `CurrentGameState - StandingBy`
3. `CurrentGameState - Active`
4. `CurrentGameState - Terminating`

ゲームサーバーの状態について詳しくは、「[What is Game Server Lifecycle of PlayFab Multiplayer Server](/services/playfab/multiplayer/servers/multiplayer-game-server-lifecycle)」を参照してください。

シャットダウン コールバックが正しく設定されていれば、状態が terminating に設定された直後にゲームサーバーは終了します。
PlayFab プラットフォーム上での不正なシャットダウンを避けるため、ゲームサーバーが確実に終了することを確認することが重要です。

LMA もゲームと共に終了します。

## ゲームへの接続テスト

LMA が **CurrentGameState - Active** を表示したら、IP アドレス 127.0.0.1 と、ゲームサーバーがリッスンしているポート NodePort を使用してゲームサーバーに接続できます。

Wrapper サンプルを使用している場合は、ブラウザーに [http://127.0.0.1:56100/Hello](http://127.0.0.1:56100/Hello) を入力して GET リクエストをテストできます。
詳細については、Wrapper サンプルを確認してください。

MultiplayerSettings.json 内の **NumHeartBeatsForActivateResponse** と **NumHeartBeatsForTerminateResponse** の値を更新することで、standing-by/active 状態の期間を調整することもできます。


## Related topics

- [GSDK プロジェクトのテストとデバッグ](/ja-jp/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
- [ゲームサーバーの割り当てと Visual Studio デバッガーの接続](/ja-jp/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools.md)
- [LocalMultiplayerAgent でコンテナー ゲーム サーバーをデバッグする](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [LocalMultiplayerAgent の概要](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/local-multiplayer-agent-overview.md)
- [ゲーム サーバー ビルドの作成](/ja-jp/services/playfab/multiplayer/servers/author-a-game-server-build.md)
