自動実行したトランザクションの完了待ち・結果の取得について

33 views
Skip to first unread message

雄一K

unread,
Feb 3, 2025, 8:09:10 AMFeb 3
to GS2 ユーザグループ
開発環境Unity2021.3.38f1
Gs2 C#SDK 2025.1.18
for Unity 2025.1.17

クエスト完了後にトランザクションの実行完了を待つ方法について教えてください。

これはDistributor.TransactionResult で実行完了を待つ理解で合っていますか?
その場合、domain.EndFuture で発行される TransactionId を指定する必要があるかと思うのですが、
以下ドキュメントでは Result に TransactionId が含まれると記載されていますが、domain.EndFuture の Result には TransactionId が含まれていません。
代わりに、Progress で取得した TransactionId を TransactionResult に設定しましたが、トランザクションの実行結果は待たれず、future.Result が null になってしまいます。(エラーにもならないですが)

GS2-Quest SDK for Game Engine API リファレンス | Game Server Services | Docs

            var domain = Define.mDomain.Quest.Namespace(
                namespaceName: questNamespaceName
            ).Me(
                gameSession: Define.mSession
            ).Progress(
            );
            var future2 = domain.ModelFuture();
            yield return future2;
            if (future2.Error != null)
            {
                onError.Invoke(future2.Error, null);
                yield break;
            }
            EzProgress progress = future2.Result;

            transactionId = progress.TransactionId; /

            var future = domain.EndFuture(
                isComplete: isComplete,
                rewards: rewards,
                config: config
            );
            yield return future;
            if (future.Error != null)
            {
                if (!future.Error.ToString().Contains("stampSheetResult.error.notFound"))
                {
                    if (future.Error.ToString().Contains("error.unknown."))
                    {
                        Debug.Log("報酬設定されていません");
                    }

                    onError.Invoke(
                        future.Error, null
                    );
                    yield break;
                }
            }
        }

        //以下はnullが返ってしまう
        {
            var domain = Define.mDomain.Distributor.Namespace(
                namespaceName: "XXXX_Distributor"
                ).Me(
                    gameSession: Define.mSession
                ).TransactionResult(
                    transactionId: transactionId
                );
            var future = domain.ModelFuture();
            yield return future;

            if (future.Error != null)
            {
                onError.Invoke(
                    future.Error, null
                );
                yield break;
            }

            //mAcquireActions = future.Result.SheetRequest;

            //onSuccess.Invoke();

            //yield break;
        }

後、ドキュメントに、「Gateway のネームスペースに対して通知を受け取るためにユーザーIDを設定必要とあったので、ログイン後に以下のコードも入れています。namespaceはコンソール上で Distributorに関連ついています。

        Debug.Log("プッシュ通知設定");
        {
            var domain = gs2.Gateway.Namespace(
                namespaceName: "XXXXX_Gateway"
            ).Me(
                gameSession: Define.mSession
            ).WebSocketSession(
            );
            var future = domain.SetUserIdFuture(
                allowConcurrentAccess: null
            );
            yield return future;
            if (future.Error != null)
            {
                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;
        }

Game Engine | Game Server Services | Docs

雄一K

unread,
Feb 3, 2025, 8:11:30 AMFeb 3
to GS2 ユーザグループ, 雄一K
すみません、補足情報として、
上記の  var domain = gs2.Gateway.Namespace(

                namespaceName: "XXXXX_Gateway"
            ).Me(
                gameSession: Define.mSession
            ).WebSocketSession(
            );
をしているにもかかわらず、
ログイン時に
The GS2-Gateway namespace does not exist and could not be configured to receive notifications from the server.
が出ています。このあたりも関係しているのでしょうか?

2025年2月3日月曜日 22:09:10 UTC+9 雄一K:

雄一K

unread,
Feb 3, 2025, 8:22:36 AMFeb 3
to GS2 ユーザグループ, 雄一K
何度もすみません。
The GS2-Gateway namespace does not existのエラーの件は解決しました。defaultというネームスペースを手動で追加する必要があったのですね。

トランザクションの完了待ちの部分のみ、回答いただけると幸いです。

2025年2月3日月曜日 22:11:30 UTC+9 雄一K:
Reply all
Reply to author
Forward
0 new messages