GS2-Realtime Beta

GS2-Realtime は現在β版として提供しています。

プロダクションでの採用前にサポートケースを通じてGS2と相談してください。

GS2-Realtime はマルチプレイゲームを実現するにあたってプレイヤー間のリアルタイム通信を実現する為のサービスです。

通信には WebSocket を利用し、ギャザリングに参加しているすべてにブロードキャストされるメッセージと、特定のプレイヤーにのみ届くユニキャストメッセージを組み合わせて通信することができます。

ギャザリングのライフサイクル

../../../_images/1a4850c1.png

GS2-Realtime では ギャザリングを作成すると サーバの IPアドレス, 待ち受けポート番号, 暗号鍵 の3つのパラメータを受け取ります。

指定された IPアドレス, 待ち受けポート に WebSocket を利用して接続すると、まずは INIT ステート になります。

この状態でサーバは Login コマンドのみ受け付けます。

Loginコマンドが受理されると、 ACTIVE ステート となります。この状態になると、ギャザリングに参加しているプレイヤーにメッセージパケットを送信したり、

他プレイヤーのメッセージパケットを受け取ることが出来るようになります。

WebSocket のコネクションを切断したり、サーバから切断されると CLOSED ステート に遷移します。

ギャザリングに参加している全てのプレイヤーのステートが CLOSED ステート になった状態で1分間なにもイベントが発生しない場合 ギャザリングは破棄されます。

コマンド

メッセージパケットを送信するとき、JSON形式のテキストデータをギャザリング作成時に受け取った暗号鍵で暗号化(AES128)してBase64をかけたデータをソケットに送信することで通信します。

Realtime サーバは以下のコマンドを受け付けます。

コマンド

説明

送信可能なステート

サンプル

Login

Realtimeサーバにログインします

パラメータ名

説明

userId

自身のユーザID

INIT

{
  "type": "login",
  "userId": {userId}
}

Message

ギャザリングに参加しているメンバーにメッセージを送信します

パラメータ名

説明

message

送信するメッセージ

dest

宛先ユーザID "all" を指定することで、ギャザリングの全参加者にメッセージが届けられます。

ACTIVE

{
  "type": "message",
  "message": {message},
  "dest": {dest}
}

イベント

他プレイヤーがギャザリングに参加したときや、メッセージを送信してきたときにはイベントとしてメッセージパケットを受け取ります。

メッセージパケットは暗号化(AES128)されており、ギャザリング作成時に受け取った暗号鍵で復号化して利用することができます。

イベント

説明

サンプル

Login

Loginコマンドの結果を返します

パラメータ名

説明

code

ステータスコード

message

メッセージ

{
  "code": {code}
  "type": "login",
  "message": {message}
}

Information

Login直後に現在のギャザリングの状態を表す情報として送信されます

パラメータ名

説明

code

ステータスコード

userIds

既に参加しているプレイヤーのユーザIDリスト

{
  "code": {code}
  "type": "information",
  "userIds": [{userIds}]
}

Join

他プレイヤーがギャザリングに参加したときに送信されます

パラメータ名

説明

code

ステータスコード

userId

参加したプレイヤーのユーザID

{
  "code": {code},
  "type": "join",
  "userId": {userId}
}

Leave

他プレイヤーがギャザリングから離脱したときに送信されます

パラメータ名

説明

code

ステータスコード

userId

参加したプレイヤーのユーザID

{
  "code": {code},
  "type": "leave",
  "userId": {userId}
}

Complete

全ての参加者が揃った時に送信されます

パラメータ名

説明

code

ステータスコード

{
  "code": {code},
  "type": "complete"
}

Receive

他プレイヤーからメッセージを受け取った時に送信されます

パラメータ名

説明

srcUserId

メッセージを送信したユーザID

message

メッセージ

{
  "type": "message",
  "srcUserId": {userId},
  "message": {message}
}

Unreached

メッセージの送信に失敗したときに送信されます

パラメータ名

説明

code

ステータスコード

userId

送信に失敗したプレイヤーのユーザID

timestamp

時間(unixepoch)

message

送信に失敗したメッセージパケットのメッセージ

dest

送信に失敗したメッセージパケットの宛先ユーザID

{
  "code": {code},
  "type": "error",
  "userId": {userId},
  "timestamp": {timestamp}
  "message": {
    "type": "message",
    "message": {message},
    "dest": {dest}
  }
}