GS2-Distributor SDK for Game Engine API リファレンス
モデル
EzStampSheetResult
トランザクション実行結果(レガシー)
サーバーサイドの自動実行で処理されたトランザクションの実行結果を記録します。
各フェーズのリクエスト内容とレスポンス結果を含みます:検証アクション(事前条件チェック)、消費アクション、入手アクション。エラー検出とリトライロジックのために HTTP ステータスコードも追跡します。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| transactionId | string | ✓ | 36 ~ 36文字 | トランザクションID このトランザクションを一意に識別する UUID です。トランザクションとその実行結果、および連鎖する後続トランザクションの関連付けに使用されます。 | ||
| taskRequests | List<EzConsumeAction> | 0 ~ 100 items | 消費アクションのリクエスト内容 | |||
| sheetRequest | EzAcquireAction | ✓ | 入手アクションのリクエスト内容 | |||
| taskResults | List<string> | [] | 0 ~ 100 items | 消費アクションの実行結果 | ||
| sheetResult | string | ~ 1048576文字 | 入手アクションの実行結果レスポンス内容 |
EzTransactionResult
トランザクション実行結果
サーバーサイドの自動実行で処理された分散トランザクションの実行結果を記録します。
各フェーズの構造化された結果を含みます:検証アクション(事前条件チェック)、消費アクション(リソース消費)、入手アクション(リソース付与)。各アクション結果にはリクエスト、HTTP ステータスコード、レスポンスペイロードが含まれます。ステータスコード(非2xx)によるエラー検出と、コンフリクト(409)やサーバーエラー(5xx)でのリトライがサポートされます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| transactionId | string | ✓ | 36 ~ 36文字 | トランザクションID この分散トランザクションを一意に識別する UUID です。実行結果の検索や、元の API リクエストとの関連付けに使用されます。 | ||
| verifyResults | List<EzVerifyActionResult> | 0 ~ 100 items | 検証アクションの実行結果リスト | |||
| consumeResults | List<EzConsumeActionResult> | 0 ~ 100 items | 消費アクションの実行結果リスト | |||
| acquireResults | List<EzAcquireActionResult> | 0 ~ 100 items | 入手アクションの実行結果リスト |
EzDistributorModel
配信モデル
配信モデルとはエンティティの入手時に所持枠を超えて入手した時のポリシーを設定するエンティティです。
GS2-Distributor を通して入手処理を行うことで、あふれたリソースを GS2-Inbox のメッセージとして転送することができます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| name | string | ✓ | ~ 128文字 | 配信モデル名 配信モデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| metadata | string | ~ 2048文字 | メタデータ メタデータには任意の値を設定できます。 これらの値は GS2 の動作には影響しないため、ゲーム内で利用する情報の保存先として使用できます。 | |||
| inboxNamespaceId | string | ~ 1024文字 | あふれたリソースを転送する GS2-Inbox のネームスペース
GRN リソースの入手がプレイヤーの所持枠を超えた場合、あふれたリソースは指定された GS2-Inbox ネームスペースにメッセージとして転送されます。プレイヤーは後から受信箱からリソースを受け取ることができます。 | |||
| whiteListTargetIds | List<string> | [] | 0 ~ 1000 items | GS2-Distributorを通して処理出来る対象のリソースGRNのホワイトリスト この配信モデルを使用して入手処理を行える対象となるリソースのGRNプレフィックスを指定します。 |
EzConfig
コンフィグ設定
トランザクションの変数に適用する設定値
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| key | string | ✓ | ~ 64文字 | 名前 | ||
| value | string | ~ 51200文字 | 値 |
EzDistributeResource
リソース配布
入手アクションとそのリクエストパラメータで構成される単一のリソース配布操作を表します。プレイヤーにリソースを配布する際に、どの GS2 API アクションをどのパラメータで実行するかを指定するために使用されます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| action | 文字列列挙型 enum { } | ✓ | 入手アクションで実行するアクションの種類 | |||
| request | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
EzBatchRequestPayload
API一括実行リクエスト
一括実行内の単一の API リクエストを表します。複数のバッチリクエストペイロードをまとめて送信することで、複数の GS2 API 呼び出しを1回のラウンドトリップで実行でき、ネットワークオーバーヘッドとレイテンシーを削減できます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| requestId | string | ✓ | ~ 128文字 | リクエストID バッチ内でこのリクエストに対してクライアントが割り当てた識別子です。バッチレスポンス内で各リクエストと対応する結果を関連付けるために使用されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| service | 文字列列挙型 enum { “account”, “adReward”, “auth”, “buff”, “chat”, “datastore”, “deploy”, “dictionary”, “distributor”, “enchant”, “enhance”, “exchange”, “experience”, “formation”, “friend”, “gateway”, “grade”, “guard”, “guild”, “identifier”, “idle”, “inbox”, “inventory”, “jobQueue”, “key”, “limit”, “lock”, “log”, “loginReward”, “lottery”, “matchmaking”, “megaField”, “mission”, “money”, “money2”, “news”, “quest”, “ranking”, “ranking2”, “realtime”, “schedule”, “script”, “seasonRating”, “serialKey”, “showcase”, “skillTree”, “stamina”, “stateMachine”, “version” } | ✓ | マイクロサービス名 呼び出す GS2 マイクロサービス名です(例: “inventory”、“experience”、“money”)。この API リクエストを受信するサービスエンドポイントを決定します。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| methodName | string | ✓ | ~ 128文字 | メソッド名 対象サービスで呼び出す API メソッド名です(例: “describeNamespaces”、“getInventory”)。指定されたサービスの有効な API メソッドと一致する必要があります。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| parameter | string | ✓ | ~ 10240文字 | パラメータ API メソッドの JSON シリアライズされたリクエストパラメータです。指定されたサービスメソッドのリクエストスキーマに準拠する必要があります。 |
EzBatchResultPayload
API一括実行結果
一括実行内の単一の API リクエストの結果を表します。各結果はリクエスト ID によって元のリクエストと関連付けられ、HTTP ステータスコードと JSON レスポンスペイロードを含みます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| requestId | string | ✓ | ~ 128文字 | リクエストID 対応するバッチリクエストと一致するクライアント割り当て識別子です。この結果を元のリクエストと関連付けるために使用されます。 | ||
| statusCode | int | ✓ | 100 ~ 1000 | ステータスコード このバッチリクエストに対して GS2 API が返した HTTP ステータスコードです。2xx は成功、4xx はクライアントエラー、5xx はサーバーエラーを示します。 | ||
| resultPayload | string | ✓ | ~ 10240文字 | レスポンス このバッチリクエストに対して GS2 API が返した JSON レスポンスボディです。API メソッドのレスポンスデータまたはエラー詳細を含みます。 |
EzAcquireAction
入手アクション
分散トランザクション内のリソース入手操作を表します。プレイヤーにリソース(アイテム、通貨、経験値など)を付与する入手アクションに対応します。GS2 API のアクション識別子と JSON シリアライズされたリクエストパラメータを含みます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| action | 文字列列挙型 enum { } | ✓ | 入手アクションで実行するアクションの種類 | |||
| request | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
EzConsumeAction
消費アクション
分散トランザクション内のリソース消費操作を表します。プレイヤーからリソース(アイテム、通貨、スタミナなど)を消費する消費アクションに対応します。消費アクションは入手アクションの前に実行され、プレイヤーが必要なコストを満たしていることを確認します。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| action | 文字列列挙型 enum { } | ✓ | 消費アクションで実行するアクションの種類 | |||
| request | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
EzVerifyAction
検証アクション
分散トランザクション内の事前条件検証操作を表します。消費・入手アクションの前に実行され、条件が満たされていることを検証します(例:所持枠の確認、クエスト完了状態の検証など)。いずれかの検証アクションが失敗した場合、トランザクション全体が中止されます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| action | 文字列列挙型 enum { } | ✓ | 検証アクションで実行するアクションの種類 | |||
| request | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 |
EzAcquireActionResult
入手アクションの実行結果
単一の入手アクション実行の結果を記録します。アクション識別子、元のリクエスト、成功・失敗を示す HTTP ステータスコード、GS2 API からの JSON レスポンスペイロードを含みます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| acquireRequest | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 | ||
| statusCode | int | 0 ~ 999 | ステータスコード この入手アクションに対して GS2 API が返した HTTP ステータスコードです。2xx は成功、409 はリトライが必要なコンフリクト、5xx はサーバーエラーを示します。 | |||
| acquireResult | string | ~ 1048576文字 | 結果内容 入手アクションの実行後に GS2 API が返した JSON レスポンスボディです。入手したリソースの詳細を含み、連鎖するトランザクション ID が含まれる場合もあります。 |
EzConsumeActionResult
消費アクションの実行結果
単一の消費アクション実行の結果を記録します。アクション識別子、元のリクエスト、成功・失敗を示す HTTP ステータスコード、GS2 API からの JSON レスポンスペイロードを含みます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| consumeRequest | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 | ||
| statusCode | int | 0 ~ 999 | ステータスコード この消費アクションに対して GS2 API が返した HTTP ステータスコードです。2xx は成功、409 はリトライが必要なコンフリクト、5xx はサーバーエラーを示します。 | |||
| consumeResult | string | ~ 1048576文字 | 結果内容 消費アクションの実行後に GS2 API が返した JSON レスポンスボディです。消費されたリソースの詳細を含みます。 |
EzVerifyActionResult
検証アクションの実行結果
単一の検証アクション実行の結果を記録します。アクション識別子、元のリクエスト、成功・失敗を示す HTTP ステータスコード、GS2 API からの JSON レスポンスペイロードを含みます。
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| verifyRequest | string | ✓ | ~ 524288文字 | アクション実行時に使用されるリクエストのJSON文字列 | ||
| statusCode | int | 0 ~ 999 | ステータスコード この検証アクションに対して GS2 API が返した HTTP ステータスコードです。2xx は検証成功、非2xx は事前条件が満たされなかったことを示します。 | |||
| verifyResult | string | ~ 1048576文字 | 結果内容 検証アクションの実行後に GS2 API が返した JSON レスポンスボディです。検証結果の詳細を含みます。 |
メソッド
getDistributorModel
名前を指定して配信モデル定義を取得する
名前を指定して、配信モデルを1件取得します。
取得できる情報には、許可されているサービスアクションと、溢れ処理用に設定されたプレゼントボックスのネームスペースが含まれます。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| distributorName | string | ✓ | ~ 128文字 | 配信モデル名 配信モデル固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzDistributorModel | 配信モデル |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).DistributorModel(
distributorName: "distributor-model-0001"
);
var item = await domain.ModelAsync(); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).DistributorModel(
distributorName: "distributor-model-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->DistributorModel(
"distributor-model-0001" // distributorName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}値の変更イベントハンドリング
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).DistributorModel(
distributorName: "distributor-model-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).DistributorModel(
distributorName: "distributor-model-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->DistributorModel(
"distributor-model-0001" // distributorName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Distributor::Model::FDistributorModel> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listDistributorModels
配信モデル定義の一覧を取得する
このネームスペースに登録されているすべての配信モデルを取得します。
配信モデルは、リソース配信のルールを定義します。許可するサービスアクションや、プレイヤーのインベントリが満杯のときに溢れたアイテムをどこに送るか(例: プレゼントボックス / 受信箱)を設定します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
Result
| 型 | 説明 | |
|---|---|---|
| items | List<EzDistributorModel> | 配信モデルのリスト |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.DistributorModelsAsync(
).ToListAsync(); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.DistributorModels(
);
List<EzDistributorModel> items = new List<EzDistributorModel>();
while (it.HasNext())
{
yield return it.Next();
if (it.Error != null)
{
onError.Invoke(it.Error, null);
break;
}
if (it.Current != null)
{
items.Add(it.Current);
}
else
{
break;
}
} const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->DistributorModels(
);
TArray<Gs2::UE5::Distributor::Model::FEzDistributorModelPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}値の変更イベントハンドリング
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeDistributorModels(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeDistributorModels(callbackId); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeDistributorModels(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeDistributorModels(callbackId); const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeDistributorModels(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeDistributorModels(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
batchExecuteApi
複数の API 呼び出しを一括実行する
複数の GS2 API リクエストを1回の呼び出しでまとめて送信し、レスポンスをまとめて受け取ります。
通信の往復回数が減り、複数の API を同時に呼ぶ必要がある場面でパフォーマンスが向上します。
たとえば、プレイヤーがホーム画面を開いたときに、インベントリ・スタミナ・クエスト進捗をまとめて取得する場合などに便利です。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| requestPayloads | List<EzBatchRequestPayload> | ✓ | 1 ~ 100 items | バッチリクエスト |
Result
| 型 | 説明 | |
|---|---|---|
| results | List<EzBatchResultPayload> | バッチリザルト |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: null
);
var result = await domain.BatchExecuteApiAsync(
requestPayloads: new List<Gs2.Unity.Gs2Distributor.Model.EzBatchRequestPayload> {
new Gs2.Unity.Gs2Distributor.Model.EzBatchRequestPayload() {
Service = "inventory",
Method = "describeSimpleItems",
Request = "{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"inventory-0001\", \"accessToken\": \"accessToken-0001\"}",
},
new Gs2.Unity.Gs2Distributor.Model.EzBatchRequestPayload() {
Service = "exchange",
Method = "describeRateModels",
Request = "{\"namespaceName\": \"namespace-0001\"}",
},
}
);
var results = result.Results; var domain = gs2.Distributor.Namespace(
namespaceName: null
);
var future = domain.BatchExecuteApiFuture(
requestPayloads: new List<Gs2.Unity.Gs2Distributor.Model.EzBatchRequestPayload> {
new Gs2.Unity.Gs2Distributor.Model.EzBatchRequestPayload() {
Service = "inventory",
Method = "describeSimpleItems",
Request = "{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"inventory-0001\", \"accessToken\": \"accessToken-0001\"}",
},
new Gs2.Unity.Gs2Distributor.Model.EzBatchRequestPayload() {
Service = "exchange",
Method = "describeRateModels",
Request = "{\"namespaceName\": \"namespace-0001\"}",
},
}
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var results = future.Result.Results; const auto Domain = Gs2->Distributor->Namespace(
nullptr // namespaceName
);
const auto Future = Domain->BatchExecuteApi(
[]
{
auto v = MakeShared<TArray<TSharedPtr<Gs2::UE5::Distributor::Model::FEzBatchRequestPayload>>>();
v->Add(
MakeShared<Gs2::UE5::Distributor::Model::FEzBatchRequestPayload>()
->WithService(TOptional<FString>("inventory"))
->WithMethod(TOptional<FString>("describeSimpleItems"))
->WithRequest(TOptional<FString>("{\"namespaceName\": \"namespace-0001\", \"inventoryName\": \"inventory-0001\", \"accessToken\": \"accessToken-0001\"}"))
);
v->Add(
MakeShared<Gs2::UE5::Distributor::Model::FEzBatchRequestPayload>()
->WithService(TOptional<FString>("exchange"))
->WithMethod(TOptional<FString>("describeRateModels"))
->WithRequest(TOptional<FString>("{\"namespaceName\": \"namespace-0001\"}"))
);
return v;
}() // requestPayloads
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();
const auto Results = Result->Results;freezeMasterData
現時点のマスターデータを固定化する
現在のマスターデータのスナップショットを作成し、以降のトランザクションがこの固定バージョンを使うようにします。マスターデータが後で更新されても影響を受けません。
整合性を保つために便利です。たとえば、プレイヤーがクエストを開始した場合、報酬はクリア時ではなく開始時のマスターデータに基づくべきです。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession |
Result
| 型 | 説明 | |
|---|---|---|
| newContextStack | string | マスターデータを固定する時刻を記録したコンテキスト |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Distribute(
);
var result = await domain.FreezeMasterDataAsync(
accessToken: null
); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Distribute(
);
var future = domain.FreezeMasterDataFuture(
accessToken: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->Distribute(
);
const auto Future = Domain->FreezeMasterData(
nullptr // accessToken
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();freezeMasterDataBySignedTimestamp
署名付きタイムスタンプの時点でマスターデータを固定化する
署名付きタイムスタンプを使って、特定の時点のマスターデータを固定化します。
FreezeMasterData(「今」の時点で固定)とは異なり、正確な時刻を指定できます。固定する時点がサーバー側で事前に決まっている場合などに使います。
署名付きタイムスタンプは SignFreezeMasterDataTimestamp で発行できます。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| body | string | ✓ | ~ 1024文字 | ボディ | ||
| signature | string | ✓ | ~ 256文字 | 署名 | ||
| keyId | string | ✓ | ~ 1024文字 | 署名計算に使用した GS2-Key の暗号鍵 GRN |
Result
| 型 | 説明 | |
|---|---|---|
| newContextStack | string | マスターデータを固定する時刻を記録したコンテキスト |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Distribute(
);
var result = await domain.FreezeMasterDataBySignedTimestampAsync(
accessToken: null,
body: "body",
signature: "signature",
keyId: "key-0001"
); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Distribute(
);
var future = domain.FreezeMasterDataBySignedTimestampFuture(
accessToken: null,
body: "body",
signature: "signature",
keyId: "key-0001"
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->Distribute(
);
const auto Future = Domain->FreezeMasterDataBySignedTimestamp(
nullptr, // accessToken
"body", // body
"signature", // signature
"key-0001" // keyId
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();runStampSheet
入手アクションを実行する(リソースの付与)
トランザクションの一部として、プレイヤーにリソースを付与する入手アクションを1つ実行します。
たとえば、アイテムの付与、経験値の加算、ゲーム内通貨の付与などです。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| stampSheet | string | ✓ | ~ 5242880文字 | トランザクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN | ||
| contextStack | string | ~ 32768文字 | リクエストコンテキスト |
Result
| 型 | 説明 | |
|---|---|---|
| statusCode | int | ステータスコード |
| result | string | レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunStampSheetExpress
トランザクション内の全アクションを一括実行する(エクスプレスモード)
トランザクションの検証・消費・入手アクションを1回の API 呼び出しでまとめて実行します。個別に実行するより高速です。
エラーが発生した場合は再度呼び出してください。消費アクションが重複して適用されない仕組みがあるため、安全にリトライできます。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| stampSheet | string | ✓ | ~ 5242880文字 | トランザクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN |
Result
| 型 | 説明 | |
|---|---|---|
| verifyTaskResultCodes | List<int> | 検証アクションの実行ステータスコード |
| verifyTaskResults | List<string> | 検証アクションの実行結果 |
| taskResultCodes | List<int> | 消費アクションの実行ステータスコード |
| taskResults | List<string> | 消費アクションの実行結果 |
| sheetResultCode | int | 入手アクションの実行ステータスコード |
| sheetResult | string | 入手アクションの実行結果レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunStampSheetExpressWithoutNamespace
ネームスペースなしでトランザクション内の全アクションを一括実行する(エクスプレスモード)
エクスプレスモードの高速性と、ネームスペース省略の軽量さを組み合わせたバージョンです。
検証・消費・入手アクションを1回の呼び出しでまとめて実行します。重複実行排除の仕組みがあるため、安全にリトライできます。
トレードオフ: トランザクションログが GS2-Log に記録されない、溢れ処理が使えないなどの制約があります。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| stampSheet | string | ✓ | ~ 5242880文字 | トランザクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN |
Result
| 型 | 説明 | |
|---|---|---|
| verifyTaskResultCodes | List<int> | 検証アクションの実行ステータスコード |
| verifyTaskResults | List<string> | 検証アクションの実行結果 |
| taskResultCodes | List<int> | 消費アクションの実行ステータスコード |
| taskResults | List<string> | 消費アクションの実行結果 |
| sheetResultCode | int | 入手アクションの実行ステータスコード |
| sheetResult | string | 入手アクションの実行結果レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunStampSheetWithoutNamespace
ネームスペースを指定せずに入手アクションを実行する
ネームスペースの指定を省略した、RunStampSheet の軽量バージョンです。
オーバーヘッドが減りますが、トランザクションログが GS2-Log に記録されない、溢れ処理が使えないなどのトレードオフがあります。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| stampSheet | string | ✓ | ~ 5242880文字 | トランザクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN | ||
| contextStack | string | ~ 32768文字 | リクエストコンテキスト |
Result
| 型 | 説明 | |
|---|---|---|
| statusCode | int | ステータスコード |
| result | string | レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunStampTask
消費アクションを実行する(リソースの消費)
トランザクションの一部として、プレイヤーからリソースを差し引く消費アクションを1つ実行します。
たとえば、ゲーム内通貨の支払い、スタミナの消費、アイテムの使用などです。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| stampTask | string | ✓ | ~ 5242880文字 | 消費アクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN | ||
| contextStack | string | ~ 32768文字 | リクエストコンテキスト |
Result
| 型 | 説明 | |
|---|---|---|
| contextStack | string | タスクの実行結果を反映したコンテキストスタック |
| statusCode | int | ステータスコード |
| result | string | レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunStampTaskWithoutNamespace
ネームスペースを指定せずに消費アクションを実行する
ネームスペースの指定を省略した、RunStampTask の軽量バージョンです。
オーバーヘッドが減りますが、トランザクションログが GS2-Log に記録されない、溢れ処理が使えないなどのトレードオフがあります。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| stampTask | string | ✓ | ~ 5242880文字 | 消費アクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN | ||
| contextStack | string | ~ 32768文字 | リクエストコンテキスト |
Result
| 型 | 説明 | |
|---|---|---|
| contextStack | string | タスクの実行結果を反映したコンテキストスタック |
| statusCode | int | ステータスコード |
| result | string | レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunVerifyTask
検証アクションを実行する(前提条件のチェック)
トランザクションが進む前に前提条件が満たされているかどうかをチェックする、検証アクションを1つ実行します。
たとえば、プレイヤーが必要なアイテムを持っているか、特定のレベルに達しているかなどの検証です。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| verifyTask | string | ✓ | ~ 5242880文字 | 検証アクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN | ||
| contextStack | string | ~ 32768文字 | リクエストコンテキスト |
Result
| 型 | 説明 | |
|---|---|---|
| contextStack | string | タスクの実行結果を反映したコンテキストスタック |
| statusCode | int | ステータスコード |
| result | string | レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんrunVerifyTaskWithoutNamespace
ネームスペースを指定せずに検証アクションを実行する
ネームスペースの指定を省略した、RunVerifyTask の軽量バージョンです。
オーバーヘッドが減りますが、トランザクションログが GS2-Log に記録されない、溢れ処理が使えないなどのトレードオフがあります。
通常は直接呼び出す必要はありません。トランザクション処理時に SDK が自動的に処理します。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| verifyTask | string | ✓ | ~ 5242880文字 | 検証アクション | ||
| keyId | string | ✓ | ~ 1024文字 | 暗号鍵 GRN | ||
| contextStack | string | ~ 32768文字 | リクエストコンテキスト |
Result
| 型 | 説明 | |
|---|---|---|
| contextStack | string | タスクの実行結果を反映したコンテキストスタック |
| statusCode | int | ステータスコード |
| result | string | レスポンス内容 |
実装例
// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// New Experience ではSDKレベルで実行されるため明示的にAPIを呼び出す必要はありません
// New Experience runs at the SDK level, so there is no need to explicitly call the API// SDKレベルで実行されるため明示的にAPIを呼び出す必要はありませんsetDefaultConfig
トランザクションのデフォルト設定値を登録する
トランザクション発行時に使用されるデフォルトの Config 値を保持したコンテキストを準備します。
Config はトランザクションのアクションに埋め込める変数として機能します。たとえば、スロット名や数量の指定などに使います。
ここでデフォルト値を設定しておけば、トランザクション発行のたびに毎回指定する必要がなくなります。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| gameSession | GameSession | ✓ | GameSession | |||
| config | List<EzConfig> | ✓ | 1 ~ 1000 items | トランザクションのプレースホルダの適用する設定値 |
Result
| 型 | 説明 | |
|---|---|---|
| newContextStack | string | デフォルトコンフィグを反映するためのコンテキストスタック |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: null
);
var result = await domain.SetDefaultConfigAsync(
accessToken: null,
config: new List<Gs2.Unity.Gs2Distributor.Model.EzConfig> {
new Gs2.Unity.Gs2Distributor.Model.EzConfig() {
Key = "key-0001",
Value = "value-0001",
},
new Gs2.Unity.Gs2Distributor.Model.EzConfig() {
Key = "key-0002",
Value = "value-0002",
},
}
); var domain = gs2.Distributor.Namespace(
namespaceName: null
);
var future = domain.SetDefaultConfigFuture(
accessToken: null,
config: new List<Gs2.Unity.Gs2Distributor.Model.EzConfig> {
new Gs2.Unity.Gs2Distributor.Model.EzConfig() {
Key = "key-0001",
Value = "value-0001",
},
new Gs2.Unity.Gs2Distributor.Model.EzConfig() {
Key = "key-0002",
Value = "value-0002",
},
}
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
} const auto Domain = Gs2->Distributor->Namespace(
nullptr // namespaceName
);
const auto Future = Domain->SetDefaultConfig(
nullptr, // accessToken
[]
{
auto v = MakeShared<TArray<TSharedPtr<Gs2::UE5::Distributor::Model::FEzConfig>>>();
v->Add(
MakeShared<Gs2::UE5::Distributor::Model::FEzConfig>()
->WithKey(TOptional<FString>("key-0001"))
->WithValue(TOptional<FString>("value-0001"))
);
v->Add(
MakeShared<Gs2::UE5::Distributor::Model::FEzConfig>()
->WithKey(TOptional<FString>("key-0002"))
->WithValue(TOptional<FString>("value-0002"))
);
return v;
}() // config
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
const auto Result = Future->GetTask().Result();getStampSheetResult
完了したトランザクションの結果を取得する(レガシー)
トランザクションIDを指定して、過去に完了したトランザクションの実行結果を取得します。
結果には、実行された各アクション(検証・消費・入手)のステータスとレスポンスが含まれます。
トランザクションで何が起きたかを確認するために使います。たとえば、実際にどの報酬が付与されたかの確認などに便利です。
この API はレガシー(スタンプシート方式)のトランザクション結果を取得します。新しいトランザクション形式の場合は GetTransactionResult を使用してください。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| transactionId | string | ✓ | 36 ~ 36文字 | トランザクションID このトランザクションを一意に識別する UUID です。トランザクションとその実行結果、および連鎖する後続トランザクションの関連付けに使用されます。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzStampSheetResult | トランザクションの実行結果 |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).StampSheetResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
var item = await domain.ModelAsync(); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).StampSheetResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->StampSheetResult(
"cc1985c3-54f0-4fc3-b295-dc30214284ec" // transactionId
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}値の変更イベントハンドリング
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).StampSheetResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).StampSheetResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->StampSheetResult(
"cc1985c3-54f0-4fc3-b295-dc30214284ec" // transactionId
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Distributor::Model::FStampSheetResult> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
getTransactionResult
完了したトランザクションの結果を取得する
トランザクションIDを指定して、過去に完了したトランザクションの実行結果を取得します。
結果には、実行された各アクション(検証・消費・入手)のステータスとレスポンスが含まれます。
トランザクションで何が起きたかを確認するために使います。たとえば、実際にどの報酬が付与されたか、どのリソースが消費されたかの確認に便利です。
Request
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| gameSession | GameSession | ✓ | GameSession | |||
| transactionId | string | ✓ | 36 ~ 36文字 | トランザクションID この分散トランザクションを一意に識別する UUID です。実行結果の検索や、元の API リクエストとの関連付けに使用されます。 |
Result
| 型 | 説明 | |
|---|---|---|
| item | EzTransactionResult | トランザクションの実行結果 |
実装例
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TransactionResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
var item = await domain.ModelAsync(); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TransactionResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result; const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TransactionResult(
"cc1985c3-54f0-4fc3-b295-dc30214284ec" // transactionId
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}値の変更イベントハンドリング
var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TransactionResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); var domain = gs2.Distributor.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).TransactionResult(
transactionId: "cc1985c3-54f0-4fc3-b295-dc30214284ec"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId); const auto Domain = Gs2->Distributor->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->TransactionResult(
"cc1985c3-54f0-4fc3-b295-dc30214284ec" // transactionId
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Distributor::Model::FTransactionResult> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
イベントハンドラ
OnAutoRunStampSheetNotification
トランザクションの自動実行が完了した際に通知
| 名前 | 型 | 説明 |
|---|---|---|
| namespaceName | string | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| userId | string | ユーザーID |
| transactionId | string | トランザクションID このトランザクションを一意に識別する UUID です。トランザクションとその実行結果、および連鎖する後続トランザクションの関連付けに使用されます。 |
実装例
gs2.Distributor.OnAutoRunStampSheetNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var userId = notification.UserId;
var transactionId = notification.TransactionId;
}; gs2.Distributor.OnAutoRunStampSheetNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var userId = notification.UserId;
var transactionId = notification.TransactionId;
}; Gs2->Distributor->OnAutoRunStampSheetNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto UserId = Notification->UserIdValue;
const auto TransactionId = Notification->TransactionIdValue;
});OnAutoRunTransactionNotification
トランザクションの自動実行が完了した際に通知
| 名前 | 型 | 説明 |
|---|---|---|
| namespaceName | string | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 |
| userId | string | ユーザーID |
| transactionId | string | トランザクションID この分散トランザクションを一意に識別する UUID です。実行結果の検索や、元の API リクエストとの関連付けに使用されます。 |
実装例
gs2.Distributor.OnAutoRunTransactionNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var userId = notification.UserId;
var transactionId = notification.TransactionId;
}; gs2.Distributor.OnAutoRunTransactionNotification += notification =>
{
var namespaceName = notification.NamespaceName;
var userId = notification.UserId;
var transactionId = notification.TransactionId;
}; Gs2->Distributor->OnAutoRunTransactionNotification().AddLambda([](const auto Notification)
{
const auto NamespaceName = Notification->NamespaceNameValue;
const auto UserId = Notification->UserIdValue;
const auto TransactionId = Notification->TransactionIdValue;
});