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

ゲームエンジン向け GS2-Realtime SDK の モデルの仕様 と API のリファレンス

モデル

EzRoom

ルーム

マルチプレイヤー対戦でリアルタイム通信を処理するための専用ゲームサーバーインスタンスを表します。
ルーム作成は非同期で行われ、リクエスト後にシステムがサーバーをプロビジョニングし、インスタンスの準備ができるとIPアドレス、ポート、暗号鍵が割り当てられます。
クライアントは接続を試みる前に作成完了通知を待つか、ポーリングする必要があります。
暗号鍵はゲームクライアントとリレーサーバー間のセキュアな通信チャネルを確立するために使用されます。

有効化条件必須デフォルト値の制限説明
namestring
~ 128文字ルーム名
ルーム固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
ipAddressstring~ 128文字IPアドレス
プロビジョニングされたゲームサーバーのIPアドレス。
ルームのサーバーインスタンスの準備ができた後、システムにより自動的に割り当てられます。ルーム作成直後には利用できません。最大128文字。
portint0 ~ 65535待受ポート
プロビジョニングされたゲームサーバーの待受ポート番号。
サーバーインスタンスの準備ができた後、IPアドレスと共に自動的に割り当てられます。範囲: 0~65535。
encryptionKeystring~ 256文字暗号鍵
ゲームクライアントとリレーサーバー間の通信を暗号化するためのキー。
サーバーインスタンスの準備ができた後、IPアドレスおよびポートと共に自動的に割り当てられます。
クライアントはリレーサーバーを介して送受信するメッセージの暗号化・復号化にこのキーを使用する必要があります。最大256文字。

メソッド

now

現在のサーバー時刻を取得する

GS2サーバーの現在時刻をUnixタイムスタンプ(ミリ秒)で返します。
ゲームクライアントの時計をサーバーと同期するために使います。たとえばカウントダウンタイマー、イベントの開始・終了時刻、クールダウン期間を正確に表示する際に便利です。

クライアント端末の時計は不正確だったり操作されたりする可能性があるため、サーバー時刻を使うことですべてのプレイヤーに一貫したタイミングを表示できます。

主な使い方:

  • ゲーム起動時にクライアントとサーバーの時刻差を計算し、セッション中ずっとその差分を適用する
  • 期間限定イベントやランキング期間の正確な「残り時間」を表示する
  • タイミングに敏感なアクションをサーバーに送信する前にクライアント側で検証する

Request

有効化条件必須デフォルト値の制限説明

Result

説明
timestamplong現在時刻
UNIX 時間・ミリ秒

実装例

    var domain = gs2.Realtime;
    var result = await domain.NowAsync(
    );
    var timestamp = result.Timestamp;
    var domain = gs2.Realtime;
    var future = domain.NowFuture(
    );
    yield return future;
    if (future.Error != null)
    {
        onError.Invoke(future.Error, null);
        yield break;
    }
    var timestamp = future.Result.Timestamp;
    const auto Domain = Gs2->Realtime;
    const auto Future = Domain->Now(
    );
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }
    const auto Result = Future->GetTask().Result();
    const auto Timestamp = Result->Timestamp;

getRoom

リアルタイムゲームルームの接続情報を取得する

リアルタイムゲームサーバールームに接続するために必要な情報を取得します。IPアドレス、ポート番号、暗号化キーが含まれます。

リアルタイムルームは、低遅延の通信が必要なマルチプレイヤーゲームプレイに使用されます。たとえばアクションゲーム、格闘ゲーム、協力ダンジョンなどです。

リアルタイムルームを使用する一般的な流れ:

  1. プレイヤーがルームの作成をリクエストする(別のAPIで行われ、非同期で処理されます)
  2. ルームの準備ができると、参加プレイヤーにプッシュ通知が届く
  3. 各プレイヤーが GetRoom を呼び出して接続情報(IPアドレス、ポート、暗号化キー)を取得する
  4. ゲームクライアントがこれらの情報を使ってルームサーバーに接続し、リアルタイム通信を開始する

暗号化キーはクライアントとゲームサーバー間の通信を保護するために使われます。各ルームに固有のキーが割り当てられます。

Request

有効化条件必須デフォルト値の制限説明
namespaceNamestring
~ 128文字ネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
roomNamestring
~ 128文字ルーム名
ルーム固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。

Result

説明
itemEzRoomルーム情報

実装例

    var domain = gs2.Realtime.Namespace(
        namespaceName: "namespace-0001"
    ).Room(
        roomName: "room-0001"
    );
    var item = await domain.ModelAsync();
    var domain = gs2.Realtime.Namespace(
        namespaceName: "namespace-0001"
    ).Room(
        roomName: "room-0001"
    );
    var future = domain.ModelFuture();
    yield return future;
    var item = future.Result;
    const auto Domain = Gs2->Realtime->Namespace(
        "namespace-0001" // namespaceName
    )->Room(
        "room-0001" // roomName
    );
    const auto Future = Domain->Model();
    Future->StartSynchronousTask();
    if (Future->GetTask().IsError())
    {
        return false;
    }
値の変更イベントハンドリング
    var domain = gs2.Realtime.Namespace(
        namespaceName: "namespace-0001"
    ).Room(
        roomName: "room-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);
    var domain = gs2.Realtime.Namespace(
        namespaceName: "namespace-0001"
    ).Room(
        roomName: "room-0001"
    );
    
    // イベントハンドリングを開始
    var callbackId = domain.Subscribe(
        value => {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    domain.Unsubscribe(callbackId);
    const auto Domain = Gs2->Realtime->Namespace(
        "namespace-0001" // namespaceName
    )->Room(
        "room-0001" // roomName
    );
    
    // イベントハンドリングを開始
    const auto CallbackId = Domain->Subscribe(
        [](TSharedPtr<Gs2::Realtime::Model::FRoom> value) {
            // 値が変化した時に呼び出される
            // value には変更後の値が渡ってくる
        }
    );

    // イベントハンドリングを停止
    Domain->Unsubscribe(CallbackId);

イベントハンドラ

OnCreateNotification

ルームの作成完了時に送信されるプッシュ通知

名前説明
namespaceNamestringネームスペース名
ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。
roomNamestringルーム名
ルーム固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。

実装例

    gs2.Realtime.OnCreateNotification += notification =>
    {
        var namespaceName = notification.NamespaceName;
        var roomName = notification.RoomName;
    };
    gs2.Realtime.OnCreateNotification += notification =>
    {
        var namespaceName = notification.NamespaceName;
        var roomName = notification.RoomName;
    };
    Gs2->Realtime->OnCreateNotification().AddLambda([](const auto Notification)
    {
        const auto NamespaceName = Notification->NamespaceNameValue;
        const auto RoomName = Notification->RoomNameValue;
    });