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}
  }
}