🎮
GameLift Anywhere で InitSDK できるまでの手順まとめ
取り急ぎ、メモとしてまとめておく
後日、内容を整理予定
ここでは、GameLift server API for C#
を対象としています
バージョンは、5.0.0 です
追記(2022/01/03)
公式の Developer Guide に記載ありました。
こちらのガイドでは、InitSDK の引数に ComputeName
があるようですが、GameLift Server API for C# にある InitSDK の引数 ServerParameters
のプロパティには ComputeName がありませんでした。
代わりに hostId
が存在しています。
手順
- こちらから GameLift Managed Servers SDK をダンロードする
- ダウンロードされた zip ファイルを解凍し、
GameLift-CSharp-ServerSDK-5.0.0/src/GameLiftServerSDK/bin/Release
にあるファイルを一式、ゲームサーバーのプロジェクトにコピーする(ここでは、lib
フォルダとする) -
.csproj
ファイルに下記内容を記載し、コピーした dll ファイルを認識できるようにする
<ItemGroup>
<Reference Include="GameLiftServerSDK">
<HintPath>lib\GameLiftServerSDK.dll</HintPath>
</Reference>
<Reference Include="log4net">
<HintPath>lib\log4net.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>lib\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Polly">
<HintPath>lib\Polly.dll</HintPath>
</Reference>
<Reference Include="websocket-sharp">
<HintPath>lib\websocket-sharp.dll</HintPath>
</Reference>
</ItemGroup>
- カスタムロケーションを登録する
ここでは、ロケーション名をcustom-test
としている
ロケーション名はcustom-
を頭につけないと NG になる
なんでも良いが、PC の名前とかの方がいいのかな
$ aws gamelift create-location --location-name custom-test
NG 例
$ aws gamelift create-location --location-name hogehoge
An error occurred (InvalidRequestException) when calling the CreateLocation operation: 1 validation error detected: Value 'hogehoge' at 'locationName' failed to satisfy constraint: Member must satisfy regular expression pattern: ^custom-[A-Za-z0-9\-]+
- ゲームサーバを起動するPCの情報を登録する
グローバルIPアドレスが必要になるので、
$ curl ipecho.net/plain; echo
とかで確認する。
確認できたら、PCの登録をする
ここでは、コンピュータ名を MacBookPro
にしているが、なんでも良い
--location
は先ほど作成したロケーション名を指定する
$ aws gamelift register-compute \
--compute-name MacBookPro \
--fleet-id fleet-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--ip-address xxx.xxx.xxx.xxx \
--location custom-test
- Authトークンを取得する
GemeLift Anywhere では、期限付きのAuthトークンを用いるっぽい
なので、期限が切れたらまた Auth トークンを取得する
取得の仕方は次のとおり
$ aws gamelift get-compute-auth-token \
--fleet-id fleet-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--compute-name MacBookPro
うまくいくと次の結果が得られる
{
"FleetId": "fleet-e0d974c8-499d-4750-9ecf-56f65bc8dff6",
"FleetArn": "arn:aws:gamelift:us-west-2:049037268605:fleet/fleet-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ComputeName": "MacBookPro",
"ComputeArn": "arn:aws:gamelift:us-west-2:xxxxxxx:compute/MacBookPro",
"AuthToken": "1d6c4447-xxxx-xxxx-xxxx-xxxxxxxxxx",
"ExpirationTimestamp": "2023-01-02T16:35:37+09:00"
}
- InitSDK にパラメータを渡す
Auth トークンで取得した情報を InitSDK を実行するときに引数で渡す必要がある
processId
は多分なんでも良い
ProcessId
を固定すると、2回目以降の InitSDK は GameLift API Gateway との接続に失敗してしまう。
なので、以下のリンクに記載されているような UUID を生成して、それを ProcessId に用いると良い。
https://www.uuidgenerator.net/dev-corner/c-sharp
hostId
は ComputeName と同じでないとダメだった
Aws.GameLift.Server.ServerParameters serverParameters = new Aws.GameLift.Server.ServerParameters
{
webSocketUrl = "wss://us-west-2.api.amazongamelift.com",
processId = "process-xxxxxx-xxxx", // 生成した独自の UUID
hostId = "MacBookPro",
fleetId = "fleet-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
authToken = "1d6c4447-xxxx-xxxx-xxxx-xxxxxxxxxx"
};
Aws.GameLift.GenericOutcome initSDKOutcome = GameLiftServerAPI.InitSDK(serverParameters);
これで、GameLift Anywhere が使える(はず)
Auth トークンは毎回取得するのは面倒なので、AWSSDK を使ってプログラム上から取得できると便利かも
以上!
Discussion