Game Engine
Profile
SDK の初期化には Profile というユーティリティクラスを通じて行います。 Profile は 通知処理に使用する常時接続セッションと、API呼び出しに使用するHTTPセッションを両方初期化したり、セッション切断時・アクセストークンの有効期限切れなど雑多な処理のハンドリングを自動的に行なってくれます。
Request
引数名 | 説明 |
---|---|
clientId | クレデンシャル情報 |
clientSecret | クレデンシャル情報 |
region | 接続先のGS2リージョン |
reopener | 再接続処理 |
distributorNamespaceName | トランザクション処理を実行する GS2-Distributor のネームスペース名 |
reopener には Gs2BasicReopener
を指定するのが基本となります。
このクラスでは GS2 が想定する一般的な再接続処理が定義されています。
以下の実装例では省略していますが、ここで distributorNamespaceName
を指定することで、任意の GS2-Distributor のネームスペースを使用してトランザクション処理を行えます。
GS2-Distributor が実行したトランザクションログを GS2-Log に記録したい場合は、ここで明示的にログの書き出し設定を行なったネームスペースを設定する必要があります。
Gs2BasicReopener Request
引数名 | 説明 |
---|---|
gatewaySetting | 通知設定 |
versionSetting | バージョンチェック設定 |
Gs2BasicReopener には必要に応じて2つの引数を設定する必要があります。
gatewaySetting
サーバーからのプッシュ通知を受け取るための設定です。
サーバーサイドでトランザクション(スタンプシート)を自動実行する場合や、マッチメイキング機能を利用する場合は設定をすることで、処理の完了通知を受け取れるようになります。 GS2を活用したゲーム開発を行う場合は設定が必須といえる項目かもしれません。通知処理に使用する GS2-Gateway のネームスペースを設定します。
versionSetting
アプリのバージョンチェックをセッション再接続時に自動的に行うための設定です。
セッション再接続時にバージョンチェックを行うことで、一定周期でプレイヤーにバージョンチェックを強制することができるようになります。 GS2-Gateway のセッション強制切断APIを使用すれば、全てのプレイ中のプレイヤーにバージョンチェック強制でき、古いバージョンでプレイしているプレイヤーを追い出すことが可能となります。
この機能では、バージョンチェック後にクレデンシャルの昇格処理も実装されています。 これは GS2-Version がもつ、バージョンチェックに通過したら新しいクレデンシャルを割り当てる機能のハンドリング処理で、 ゲームに埋め込むクレデンシャルはバージョンチェックを行うために必要な最小限の権限のみを持つようにし、バージョンチェックを通過した後でゲームをプレイするのに十分な権限に昇格させることが可能となります。
実装例
var profile = new Profile(
clientId,
clientSecret,
region: Region.ApNorthEast1,
reopener: new Gs2BasicReopener(
)
);
var gameSession = await profile.LoginAsync(
new Gs2AccountAuthenticator(
session: profile.Gs2RestSession,
accountNamespaceName: "namespace-0001",
keyId: "grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001",
userId: userId,
password: password,
gatewaySetting : new GatewaySetting {
gatewayNamespaceName = gatewayNamespaceName,
allowConcurrentAccess = true
},
versionSetting : new VersionSetting {
versionNamespaceName = versionNamespaceName,
targetVersions = new []
{
new EzTargetVersion
{
VersionName = "app",
Version = new EzVersion
{
Major = 1,
Minor = 0,
Micro = 0
}
}
}
}
)
);
var profile = new Profile(
clientId,
clientSecret,
region: Region.ApNorthEast1,
reopener: new Gs2BasicReopener(
)
);
var future = await profile.LoginFuture(
new Gs2AccountAuthenticator(
session: profile.Gs2RestSession,
accountNamespaceName: "namespace-0001",
keyId: "grn:gs2:{region}:{yourOwnerId}:key:namespace-0001:key:key-0001",
userId: userId,
password: password,
gatewaySetting : new GatewaySetting {
gatewayNamespaceName = gatewayNamespaceName,
allowConcurrentAccess = true
},
versionSetting : new VersionSetting {
versionNamespaceName = versionNamespaceName,
targetVersions = new []
{
new EzTargetVersion
{
VersionName = "app",
Version = new EzVersion
{
Major = 1,
Minor = 0,
Micro = 0
}
}
}
}
)
);
yield return future;
if (future.Error != null)
{
OnError(future.Error);
yield break;
}
gameSession = future.Result;
const auto Profile = MakeShared<Gs2::UE5::Util::FProfile>(
ClientId,
ClientSecret,
Gs2::Core::Model::ERegion::ApNorthEast1,
MakeShareable<Gs2::UE5::Util::IReOpener>(new Gs2::UE5::Util::FGs2BasicReOpener(
MakeShared<Gs2::UE5::Util::FGatewaySettingPtr>(
gatewayNamespaceName,
true
),
MakeShared<Gs2::UE5::Util::FVersionSettingPtr>(
versionNamespaceName,
[]{
TArray<Gs2::UE5::Version::Model::FEzTargetVersionPtr> Arr;
Arr.Add(MakeShared<Gs2::UE5::Version::Model::FEzTargetVersion>()
->WithVersionName(TOptional<FString>("app"))
->WithVersion(
MakeShared<Gs2::UE5::Version::Model::FEzVersion>()
->WithMajor(1)
->WithMinor(0)
->WithMicro(0)
)
);
return Arr;
}()
)
))
);
SDK の初期化
Profile オブジェクトを作成できたら、GS2-SDK の初期化処理を行います。 初期化処理を行うことで、GS2 のクライアントインスタンスを取得できます。
実装例
var gs2 = await profile.InitializeAsync();
var initializeFuture = profile.InitializeFuture();
yield return initializeFuture;
if (initializeFuture.Error != null) {
throw initializeFuture.Error;
}
var gs2 = initializeFuture.Result;
const auto InitializeFuture = Profile->Initialize();
InitializeFuture->StartSynchronousTask();
if (InitializeFuture->GetTask().IsError())
{
UE_LOG(GameLog, Error, TEXT("%s"), ToCStr(InitializeFuture->GetTask().Error()->String()));
return InitializeFuture->GetTask().Error();
}
const auto Gs2 = InitializeFuture->GetTask().Result();