GS2-Limit SDK for Game Engine API リファレンス
モデル
EzCounter
回数制限の現在の値
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
counterId | string | ✓ | ~ 1024文字 | カウンターGRN | |
limitName | string | ✓ | ~ 128文字 | 回数制限モデルの名前 | |
name | string | ✓ | ~ 128文字 | カウンターの名前 | |
count | int | ✓ | 0 | ~ 2147483646 | カウント値 |
createdAt | long | ✓ | 現在時刻 | 作成日時 (UNIX時間 単位:ミリ秒) | |
updatedAt | long | ✓ | 現在時刻 | 最終更新日時 (UNIX時間 単位:ミリ秒) |
EzLimitModel
回数制限モデル
回数制限にはリセット間隔を設定できます。
リセット間隔は 毎日・毎週・毎月・リセットしない の4種類から選択ができます。
回数制限の最大値はマスターデータでは設定しません。
なぜなら、ステップアップガチャのような仕組みで、購入回数カウンターが 3 回未満の場合に購入できる商品。
前述の商品を購入することが出来ず、購入回数カウンターが 5 回未満の場合に購入できる商品。というようにコンテキストによって最大値を変更できるようにするためです。
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
limitModelId | string | ✓ | ~ 1024文字 | 回数制限モデルGRN | |
name | string | ✓ | ~ 128文字 | 回数制限モデル名 | |
metadata | string | ~ 2048文字 | メタデータ | ||
resetType | enum { “notReset”, “daily”, “weekly”, “monthly” } | ✓ | ~ 128文字 | リセットタイミング | |
resetDayOfMonth | int | {resetType} == “monthly” | 1 ~ 31 | リセットをする日にち(月の日数を超える場合は、最終日として扱われます) | |
resetDayOfWeek | enum { “sunday”, “monday”, “tuesday”, “wednesday”, “thursday”, “friday”, “saturday” } | {resetType} == “weekly” | ~ 128文字 | リセットする曜日 | |
resetHour | int | {resetType} in [“monthly”, “weekly”, “daily”] | ~ 23 | リセット時刻 |
resetType に指定する列挙型の定義
定義 | 説明 |
---|---|
notReset | リセットしない |
daily | 毎日 |
weekly | 毎週 |
monthly | 毎月 |
resetDayOfWeek に指定する列挙型の定義
定義 | 説明 |
---|---|
sunday | 日曜日 |
monday | 月曜日 |
tuesday | 火曜日 |
wednesday | 水曜日 |
thursday | 木曜日 |
friday | 金曜日 |
saturday | 土曜日 |
メソッド
countUp
回数制限名とカウンター名を指定してゲームプレイヤーに紐づく回数制限カウンターをカウントアップ
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
limitName | string | ✓ | ~ 128文字 | 回数制限モデルの名前 | |
counterName | string | ✓ | ~ 128文字 | カウンターの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
countUpValue | int | ✓ | 1 | 1 ~ 2147483646 | カウントアップする量 |
maxValue | int | 1 ~ 2147483646 | カウントアップを許容する最大値 |
Result
型 | 説明 | |
---|---|---|
item | EzCounter | カウントを増やしたカウンター |
Error
このAPIには特別な例外が定義されています。
GS2-SDK for GameEngine ではゲーム内でハンドリングが必要そうなエラーは一般的な例外から派生した特殊化した例外を用意することでハンドリングしやすくしています。
一般的なエラーの種類や、ハンドリング方法は こちら のドキュメントを参考にしてください。
型 | 基底クラス | 説明 |
---|---|---|
OverflowException | BadRequestException | 回数制限の上限に達しました |
実装例
try {
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
limitName: "daily",
counterName: "counter1"
);
var result = await domain.CountUpAsync(
countUpValue: 1,
maxValue: 100
);
var item = await result.ModelAsync();
} catch(Gs2.Gs2Limit.Exception.Overflow e) {
// The maximum number of times limit has been reached.
}
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
limitName: "daily",
counterName: "counter1"
);
var future = domain.CountUpFuture(
countUpValue: 1,
maxValue: 100
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Limit.Exception.OverflowException)
{
// The maximum number of times limit has been reached.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
const auto Domain = Gs2->Limit->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Counter(
"daily", // limitName
"counter1" // counterName
);
const auto Future = Domain->CountUp(
1, // countUpValue
100 // maxValue
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
auto e = Future->GetTask().Error();
if (e->IsChildOf(Gs2::Limit::Error::FOverflowError::Class))
{
// The maximum number of times limit has been reached.
}
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (Future2->GetTask().IsError())
{
return Future2->GetTask().Error();
}
const auto Result = Future2->GetTask().Result();
getCounter
回数制限名とカウンター名を指定してゲームプレイヤーに紐づく回数制限カウンターを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
limitName | string | ✓ | ~ 128文字 | 回数制限モデルの名前 | |
counterName | string | ✓ | ~ 128文字 | カウンターの名前 | |
accessToken | string | ✓ | ~ 128文字 | ユーザーID |
Result
型 | 説明 | |
---|---|---|
item | EzCounter | カウンター |
実装例
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
limitName: "daily",
counterName: "counter1"
);
var item = await domain.ModelAsync();
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
limitName: "daily",
counterName: "counter1"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Limit->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Counter(
"daily", // limitName
"counter1" // counterName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
limitName: "daily",
counterName: "counter1"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Counter(
limitName: "daily",
counterName: "counter1"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Limit->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
)->Counter(
"daily", // limitName
"counter1" // counterName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Limit::Model::FCounter> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listCounters
ゲームプレイヤーに紐づく回数制限カウンターの一覧を取得
回数制限名は省略可能です。
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
limitName | string | ~ 128文字 | 回数制限モデル名 | ||
accessToken | string | ✓ | ~ 128文字 | ユーザーID | |
pageToken | string | ~ 1024文字 | データの取得を開始する位置を指定するトークン | ||
limit | int | ✓ | 30 | 1 ~ 1000 | データの取得件数 |
Result
型 | 説明 | |
---|---|---|
items | List<EzCounter> | カウンターのリスト |
nextPageToken | string | リストの続きを取得するためのページトークン |
実装例
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var items = await domain.CountersAsync(
limitName: "daily"
).ToListAsync();
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.Counters(
limitName: "daily"
);
List<EzCounter> items = new List<EzCounter>();
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->Limit->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
const auto It = Domain->Counters(
"daily" // limitName
);
TArray<Gs2::UE5::Limit::Model::FEzCounterPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeCounters(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeCounters(callbackId);
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
);
var it = domain.Counters(
limitName: "daily"
);
List<EzCounter> items = new List<EzCounter>();
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->Limit->Namespace(
"namespace-0001" // namespaceName
)->Me(
GameSession
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeCounters(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeCounters(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
getLimitModel
回数制限名を指定して回数制限モデルを取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 | |
limitName | string | ✓ | ~ 128文字 | 回数制限モデル名 |
Result
型 | 説明 | |
---|---|---|
item | EzLimitModel | 回数制限モデル |
実装例
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).LimitModel(
limitName: "limit-model-0001"
);
var item = await domain.ModelAsync();
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).LimitModel(
limitName: "limit-model-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Limit->Namespace(
"namespace-0001" // namespaceName
)->LimitModel(
"limit-model-0001" // limitName
);
const auto Future = Domain->Model();
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
return false;
}
値の変更イベントハンドリング
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).LimitModel(
limitName: "limit-model-0001"
);
// イベントハンドリングを開始
var callbackId = domain.Subscribe(
value => {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
domain.Unsubscribe(callbackId);
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
).LimitModel(
limitName: "limit-model-0001"
);
var future = domain.ModelFuture();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Limit->Namespace(
"namespace-0001" // namespaceName
)->LimitModel(
"limit-model-0001" // limitName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->Subscribe(
[](TSharedPtr<Gs2::Limit::Model::FLimitModel> value) {
// 値が変化した時に呼び出される
// value には変更後の値が渡ってくる
}
);
// イベントハンドリングを停止
Domain->Unsubscribe(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。
listLimitModels
回数制限モデルの一覧を取得
Request
型 | 必須 | デフォルト | 値の制限 | 説明 | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 |
Result
型 | 説明 | |
---|---|---|
items | List<EzLimitModel> | 回数制限モデルのリスト |
実装例
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
);
var items = await domain.LimitModelsAsync(
).ToListAsync();
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.LimitModels(
);
List<EzLimitModel> items = new List<EzLimitModel>();
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->Limit->Namespace(
"namespace-0001" // namespaceName
);
const auto It = Domain->LimitModels(
);
TArray<Gs2::UE5::Limit::Model::FEzLimitModelPtr> Result;
for (auto Item : *It)
{
if (Item.IsError())
{
return false;
}
Result.Add(Item.Current());
}
値の変更イベントハンドリング
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
);
// イベントハンドリングを開始
var callbackId = domain.SubscribeLimitModels(
() => {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
domain.UnsubscribeLimitModels(callbackId);
var domain = gs2.Limit.Namespace(
namespaceName: "namespace-0001"
);
var it = domain.LimitModels(
);
List<EzLimitModel> items = new List<EzLimitModel>();
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->Limit->Namespace(
"namespace-0001" // namespaceName
);
// イベントハンドリングを開始
const auto CallbackId = Domain->SubscribeLimitModels(
[]() {
// リストの要素が変化した時に呼び出される
}
);
// イベントハンドリングを停止
Domain->UnsubscribeLimitModels(CallbackId);
Warning
このイベントはSDKがもつローカルキャッシュの値が変更された時に呼び出されます。
ローカルキャッシュは SDK が持つ API の実行、または GS2-Gateway の通知を有効にした GS2-Distributor 経由でのスタンプシートの実行、または GS2-Gateway の通知を有効にした GS2-JobQueue の実行によって変化したもののみが対象となります。
そのため、これらの方法以外で値が変更されてもコールバックは呼び出されません。