NAV
Unity Unreal Engine 4

GS2-JobQueue

GS2-SDK for Game Engine のリファレンス

ゲームエンジン向けSDKモデル

EzJob

ジョブキューとは直ちに処理を完了せず、処理を遅延実行するための仕組みです。 例えば、キャラクターを入手したときに直ちに実行しなければならない処理としては所持品にキャラクターを格納することです。 一方で、直ちに処理しなければならないわけではない処理として、図鑑に登録する という処理があります。

こういった直ちに処理するまでもない処理をジョブキューを経由して処理するようにすることで、障害に強い設計にすることができます。 なぜなら、図鑑サービスが何らかの障害によって止まっていたとしても、図鑑に登録されない状態でゲームを継続することができます。 ジョブキューに詰まれた処理は失敗しても、障害が解消した後でリトライすることで結果的に正しい状態にできます。

GS2 ではこのような 結果整合 処理を推奨しており、様々な場面でジョブキューを利用した遅延処理が行われます。

説明
jobId string ジョブGRN
scriptId string スクリプトGRN
args string 引数
currentRetryCount int 現在のリトライ回数
maxTryCount int 最大試行回数

EzJobEntry

説明
scriptId string スクリプトGRN
args string 引数
maxTryCount int 最大試行回数

EzJobResultBody

説明
tryNumber int 試行回数
statusCode int ステータスコード
result string レスポンスの内容
tryAt long 作成日時

メソッド

run

run

ProfilePtr = std::make_shared<gs2::ez::Profile>(
    TCHAR_TO_ANSI(*ClientId),
    TCHAR_TO_ANSI(*ClientSecret),
    gs2::ez::Gs2BasicReopener()
);

ClientPtr = std::make_shared<gs2::ez::Client>(
    *ProfilePtr
);

ProfilePtr->initialize(
    [this](gs2::ez::Profile::AsyncInitializeResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "profile.initialize failed.");
        }
        else
        {
            AccountCreate();
        }
    }
);

// Up to this line is the initialization process.

ClientPtr->jobQueue.run(
    [](gs2::ez::account::AsyncEzRunResult r)
    {
        if (r.getError())
        {
            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "jobQueue.run failed.");
        }
        else
        {
            Item = r.getResult()->getItem();
            Result = r.getResult()->getResult();
            IsLastJob = r.getResult()->getIsLastJob();
        }
    },
    ProfilePtr->getGs2Session(),
    TCHAR_TO_ANSI("namespace2") // namespaceName
);
using Gs2.Core.AsyncResult;
using Gs2.Gs2Account.Unity.Result;
using Gs2.Unity.Util;

var profile = new Profile(
    clientId: "your client id",
    clientSecret: "your client secret",
    reopener: new Gs2BasicReopener()
);

{
    AsyncResult<object> asyncResult = null;

    var current = profile.Initialize(
        r => { asyncResult = r; }
    );

    yield return current;

    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }
}

// Up to this line is the initialization process.

var gs2 = new Gs2.Unity.Client(profile);

{
    AsyncResult<EzRunResult> asyncResult = null;
    var current = gs2.JobQueue.Run(
        callback: r => { asyncResult = r; },
        session: session,
        namespaceName: "namespace2"
    );

    yield return current;
    if (asyncResult.Error != null)
    {
        OnError(asyncResult.Error);
        yield break;
    }

    var result = asyncResult.Result;
    var item = result.Item;
    var result = result.Result;
    var isLastJob = result.IsLastJob;
}

タスクキューのジョブを実行します。

タスクキューのプッシュ通知設定をすることでタスクキューに新しくジョブが追加されたときにプッシュ通知を受けることができます。 定期的にこのAPIを呼び出すか、プッシュ通知をトリガーしてこのAPIを呼び出してください。 isLastJob が false を返している間は繰り返し実行してください。

Request

必須 デフォルト 値の制限 説明
namespaceName string ~ 32文字 ネームスペース名
accessToken string ~ 128文字 ユーザーID

Result

説明
item Job ジョブ
result JobResultBody ジョブの実行結果
isLastJob bool