ラッパーのサンプル
ラッパー サンプル (wrappingGsdk とも呼ばれます) は、Windows OS と Linux OS を使用するゲーム サーバー用のビルドの展開に使用できるように、既存のゲームをラップしています。
ラッパー アプリケーションを使用すると、PlayFab Multiplayer Servers でゲーム サーバー ビルドを使用することもできます。
Important
ラッパーは、標準の出力ストリームとエラー ストリームを処理して GSDK メソッドを呼び出すことで回避策であり、運用環境で使用するためのものではありません。
サンプル コンテンツ
このサンプルは、2 つの .NET Core コンソール アプリケーションで構成されています。
- ラッパーは、PlayFab Game Server SDK (GSDK) 用の最新の NuGet パッケージをゲーム サーバーと統合します。 このラッパー アプリケーションは、運用環境での使用向けではありません
- Fakegame は、GSDK に関する知識がない基本的なゲーム サーバーです。 これは、PlayFab Multiplayer Servers を使用する前に使用する一般的なゲーム サーバーのようなものです。 TCP ポート 80 をリッスンする ASP.NET Core Web Server Kestrel を起動します。 これは、GSDK の知識がまったく必要ないゲーム サーバーをシミュレートすることを目的としています。 独自のゲーム サーバーがない場合に使用できます。 これには、単純な応答を取得するための /hello とサーバーを終了できる /hello/terminate という 2 つの GET ルートがあります。
要件
注意
PlayFab Multiplayer Servers を使用して表示するには、ゲーム マネージャーから機能を有効にする必要があります。 手順については、「PlayFab サーバー 機能を有効にする」を参照してください。
チュートリアル
このサンプルのビルドに関するライブ チュートリアルについては、Microsoft Game Dev 2021 (約 2.52 から開始) からのプレゼンテーションをご覧ください。
Wrapper 実行可能ファイルを取得してビルドする
- 標準的な Git メソッドを使用するか、これを zip ファイルとしてダウンロードして GSDK ラッパー サンプルを取得します
- コマンド プロンプトを開き、cd コマンドを実行して、作業ディレクトリ パスを wrapper.csproj ファイルの場所に変更します。 例: cd C:/ReplaceWithYourFilePath/wrappingGsdk/wrapper
- 次に、次の .NET Core CLI コマンドを実行します。
dotnet publish --self-contained -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
ラッパーのビルドが成功すると、実行可能ファイルが次の図に示すように、\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish フォルダーに公開されます。
ゲーム サーバー資産を作成する
ゲーム サーバー資産を作成する方法は 2 つあります。
Fakegame ゲーム サーバーとラッパーを使用する
build.ps1 を使用して、両方のプロジェクト (ラッパーとフェイクゲーム) をビルドおよびパッケージ化します。 このスクリプトは、必要なファイルを格納した .zip ファイルを含むドロップ フォルダーを作成します。
- PowerShell を開く
- cd コマンドを使用して、ディレクトリ パスを build.ps1 スクリプトの場所に変更します。 例: cd C:/ReplaceWithYourFilePath/wrappingGsdk/
- Run \build.ps1
- スクリプトが正常に実行されたら、\wrappingGsdk\drop\ フォルダーに移動します。 偽のゲーム サーバー ビルド、ラッパー実行可能ファイル (前の手順でビルド)、およびその他の必要なファイルを含む gameassets.zip ファイルが作成されます。
独自のゲーム サーバー ファイルとラッパーを使用する
評価でゲーム プロジェクトを使用するには、ラッパーとゲーム サーバーの実行可能ファイルを同じフォルダーに配置します。
- ラッパー実行可能ファイルビルドする手順に従います
- ラッパーの公開場所 (..\wrappingGsdk\wrapper\bin\Debug\netcoreapp3.1\win-x64\publish) に移動します
- 別のウィンドウで、ゲーム サーバー ビルドと、ゲーム サーバー ビルドの実行に必要なファイルに移動します。 必要なファイルがわからない場合は、「必要な DLL ファイルの決定」を参照してください
- ゲーマー サーバー ビルドと必要なすべてのファイルをラッパーの公開場所にコピーします
- ラッパーの発行場所にあるすべてのファイルを選択します
- すべてのファイルを選択した状態で右クリックし、[Send to (送信先)]>[Compressed (zip) files to zi (zip に圧縮したファイル)] を選択します。 ラッパー発行フォルダーを選択して zip に追加しないでください。 これにより、正しくないマッピングが発生します。
ヒント
多重チェックのために、「Fakegame ゲーム サーバーとラッパーを使用する」の手順に従って gameassets.zip をビルドし、参照用としてください。
Linux コンテナー イメージの作成とアップロード (Linux サーバーのみ)
Linux コンテナー イメージを作成するには、Dockerfile が必要です。 Dockerfile は拡張子のないテキスト ファイルであり、特定のコンテナー イメージを構築するために必要なすべてのコマンドが含まれています。 このサンプルでは、このファイルは既に作成されています。 必要なのは、コンテナー イメージをビルドして実行することです。
Windows 開発デバイスを使用する場合は、Linux 用 Windows サブシステム (WSL) をインストールする必要があります。 手順については後述します。 詳細については、「Windows と Linux のコンテナー イメージの違い」を参照してください。
- Windows 開発デバイスを設定する (オプション)
- PlayFab コンテナー レジストリのサインイン資格情報を取得する
- 既存の Dockerfile を使用するか、独自の Dockerfile を作成します。この手順は、FakeGame または独自のゲーム サーバーのどちらを使用しているかによって異なります。
- FakeGame を使用している場合は、Dockerfile があることを確認します
- ゲームを使用している場合、または Dockerfile を作成する必要がある場合は、「Dockerfile を作成する」を参照してください。 FakeGame の Dockerfile を出発点として使用できます。
- Ubuntu など、Docker がインストールされている Linux ターミナルを開きます。 TAG 変数と ACR 変数の値を実際の値に置き換えます。 次に、以下のコマンドを実行します。
TAG="0.1"
ACR="customer5555555.azurecr.io"
docker login ${ACR}
ヒント
ACR 変数と TAG 変数が正しく定義されていることを確認するには、エコー $ACRと echo $TAG を実行します。
- 前の手順で取得したユーザー名とパスワードを入力します。
- Linux コンテナ イメージをビルドしてアップロードします。
次のコマンドを実行して、Dockerfile をビルドしてアップロードします。 docker build コマンドの最後に "." があります。 Dockerfile と同じフォルダー/ディレクトリに存在する必要があります。 詳しくは、「Linux コンテナ イメージをビルドしてアップロードする」を参照してください。
docker build -t ${ACR}/wrapper:${TAG} .
docker push ${ACR}/wrapper:${TAG}
ゲーム マネージャーまたは API を使用したビルドの配置
ビルドの展開プロセスは、Windows と Linux の両方のゲーム サーバーで非常によく似ています。
Windows ゲーム サーバーを展開する
手順は、Windows Runner C# サンプルに似ています。 次の手順に従って、以下の相違点を示します。
これをローカルでテストする場合は、「ゲーム サーバーおよび PlayFab との統合のローカルでのデバッグ」を参照してください。
このサンプルに固有の設定
- コマンドを開始する:
- C:\Assets\wrapper.exe -g C:\Assets\fakegame.exe arg1 arg2 を使用します
- ゲーム サーバー ビルドを使用している場合は、fakegame.exe をゲーム サーバー実行可能ファイルの名前に置き換えます
- ネットワーク構成: 名前: gameport、ポート: 80、プロトコル: TCP
- アセット: FakeGame を使用する場合は、アセットとして gameassets.zip をアップロードします。
Linux ゲーム サーバーを展開する
展開するには、以下の一般的な手順に従います。
このサンプルに固有の設定
- アップロードしたコンテナーを選択します
- ネットワーク構成: 名前: gameport、ポート: 80、プロトコル: TCP
- アセットをアップロードしてスタート コマンドを設定する必要はありません
注意
RequestMultiplayerServer API を使用して割り当て中、接続先のポートは 80 とは異なります。 これは、PlayFab マルチプレイヤー サーバー サービスが、Azure Virtual Machinesで実行されているゲーム サーバーへの Azure Load Balancer (パブリック インターネットにポートを公開する) 間のマッピングを作成するためです。
LocalMultiplayerAgent を使用してラッパーを実行する
カスタム ゲーム サーバーで GSDK 統合をテストする場合は、LocalMultiplayerAgent の使用を強くお勧めします。
Windows コンテナーで LocalMultiplayerAgent を使用している場合は、MultiplayerSettings.json ファイルを適切に構成する必要があります。 次の例を見つけることができます。LocalFilePath と StartGameCommand の値に特に注意してください。 ゲーム サーバー ビルドを使用している場合は、忘れずに fakegame.exe をゲーム サーバー実行可能ファイルの名前に置き換えます
"AssetDetails": [
{
"MountPath": "C:\\Assets",
"SasTokens": null,
"LocalFilePath": "C:\\projects\\gsdkSamples\\wrappingGsdk\\drop\\gameassets.zip"
}
],
"StartGameCommand": "C:\\Assets\\wrapper.exe -g C:\\Assets\\fakegame.exe",
// if you are using fakegameserver you should also configure port mapping for port 80
"PortMappingsList": [
[
{
"NodePort": 56100,
"GamePort": {
"Name": "gameport",
"Number": 80,
"Protocol": "TCP"
}
}
]
]
これで LocalMultiplayerAgent を使用してテストする準備ができました。 正しく構成されている場合は、LocalMultiplayerAgent がゲーム サーバーを起動するとすぐに、http://localhost:56100/Helloで curl 経由で接続できます。
MPS 上のゲーム サーバーに接続する方法
MPS 上のゲーム サーバーとの接続を確立するには、正しいポート番号を特定することが不可欠です。 このことが要件になるのは、構成上、ロード バランサーの背後に管理下の仮想マシンが複数あり、さらに、個々の仮想マシン上で多数のゲーム サーバー インスタンスが動作している可能性があるためです。 こうした環境では、1 つのパブリック IP ポートが、複数の仮想マシン上のいろいろなポート (それぞれが個別のゲーム サーバー インスタンスに関連付けられる) に対応している可能性があります。
ゲーム マネージャーを使用する
ゲーム マネージャー UI では、ゲーム サーバーを割り当て、そのサーバーへの接続を確立する操作を実行できます。
- ゲーム マネージャーにログインする
- [マルチプレイヤー] => [サーバー] ページに移動し、ビルドを選択します
- [サーバー] ページに移動し、[要求サーバー] ボタンをクリックします。
- 次のページで、パブリック IPv4 アドレスとポートをメモします。
- curl を使用して、http://[IPV4Address]:[Ports->Num]/Hello に接続します。
Mps アロケーター サンプルを使用する
ここでは、MPS アロケーター サンプルを使用してゲーム サーバーを割り当て、そのサーバーへの接続を確立する方法を示します。
- MPS アロケーター サンプルをコンパイルして実行します。
- "ListBuildSummaries" コマンドを実行して、使用可能なビルドとそれに対応するビルド ID を表示します。
- "RequestMultiplayerServer" を呼び出して、ゲーム サーバー インスタンスの要求処理を開始します。
- 選択したビルド ID を "ListMultiplayerServers" コマンドに入力して、使用可能なサーバーの一覧を表示します。
- アクティブなゲーム サーバー インスタンスを 1 つ選択し、前の手順で取得したビルド ID とセッション ID を指定して "GetMultiplayerServerDetails" を実行します。
- 応答に表示される IPV4Address と Ports->Num をメモします。
- curl を使用して、http://[IPV4Address]:[Ports->Num]/Hello に接続します。