Skip to content

WebSocket Json仕様

たけちゃ edited this page Jul 15, 2020 · 11 revisions

送受信データ

随時

ステータス情報

ゲームのステータスと参加者情報を受け取る ​ この情報がそのまま画面の内容となる。全員の画面に変更が必要な場合、この情報を送信する。 ​

  • 誰かが入室した時
  • 誰かが退出した時
  • 問題出題時
  • 誰かが解答した時
  • 全員が解答し終わった時 ​

ブラウザからサーバへ

(none) ​

サーバからブラウザへ

{
    'type': 'Status','data': {
        // 今の状態を示す   問題待ち              解答待ち             解答締め切り       解答オープン      結果発表
        'currentStatus': 'WAITING_QUESTION' | 'WAITING_ANSWER' | 'CLOSE_ANSWER' | 'OPEN_ANSWER' | 'OPEN_AGGREGATE',
    
        'currentQuestion': string | null    // 今出ている問題 CLOSE_ANSWER, OPEN_ANSWER, OPEN_AGGREGATEの時必須
    
        'players': [
            // プレイヤーの数だけ下のオブジェクトが増える
            {
                'id': string                // 一意なID
                'name': string              // ニックネーム
                'role': 'admin' | 'player' | 'spectator' // プレイヤータイプ
                'stars': number             // 星の数
                'answer': string | null,    // プレイヤーが解答した内容
                'isAnswered': boolean,      // このプレイヤーが解答したか
                'alterStars': number | null // 変更されたスターの数 'OPEN_AGGRIGATE' の時必須
                'connectionStatus': 'online' | 'offline' // 接続されているかどうか
            }
        ]
    }
}

​ ​

ルーム入室時

プレイヤー名前変更

ブラウザがURLを開き、プレイヤー名を入力・決定したとき。 ​

ブラウザからサーバへ
{
    'type': 'ChangeName','data': {
        'accountName': string
    }
}

サーバからブラウザへ

(none) ​

出題待ち状態

出題する問題

  • 管理者側 isAdmin に限って叩ける ​
ブラウザからサーバへ
{
    'type': 'SetQuestion','data': {
        'question': string,
        'correctAnswer': string | null
    }
}

サーバからブラウザへ

(none) ​ ステータス情報currentStatus で代用する。 ​ ステータス情報の currentStatusCLOSE_ANSWER に変更し、問題情報を追加して再送する。 ​

問題解答待ち状態

解答締め切り

プレイヤーの解答を締め切りする ​まだ解答を送信していないプレイヤーは強制的に今入力されている内容を送信する

ブラウザからサーバへ
  • 管理者側に限って叩ける
{
    'type': 'CloseApplications'
}

これが叩かれたらステータス情報の currentStatusCLOSE_ANSWER に移動する。

サーバからブラウザへ
{
    'type': 'ForceSendAnswer'
}

まだ解答を出していないプレイヤーは解答提出を行う

解答提出

ブラウザからサーバへ
  • 解答締め切り時にサーバから強制解答送信指示をもらった時
  • プレイヤーが 解答する ボタンを押した時 ​
{
    'type': 'SetAnswer',
    'data': {
        'answer': string,
    }
}

​ 同時に全プレイヤーにステータス情報を再送 ​

解答オープン待ち状態

一斉に解答オープン

ブラウザからサーバへ
  • 管理者側 isAdmin に限って叩ける ​
{
    'type': 'OpenAnswers'
}

サーバからブラウザへ

(none) ​ ステータス情報currentStatus で代用する。 ​ サーバが OpenAnswers を受信後ステータス情報の currentStatusOPEN_ANSWER に変更し再送する。 ​

ブラウザからサーバへ

(none) ​

集計結果送信

ブラウザからサーバへ
  • 管理者側 isAdmin に限って叩ける ​
{
    'type': 'SetAlterStars','data': {
        'alterStars': [
            {
                'accountId': string,
                'alterStars': number,
            }
        ],    
    },
}

サーバからブラウザへ

(none) ​ ステータス情報currentStatus で代用する。 ​ サーバが SetAlterStars を受信後ステータス情報の currentStatusOPEN_AGGREGATE に変更し再送する。 ​

結果発表終了待ち状態 & 次の問題へ

ブラウザからサーバへ
  • 管理者側 isAdmin に限って叩ける ​
{ 
    'type': 'GoToNextQuestion',
}

サーバからブラウザへ

(none) ​ ステータス情報currentStatus で代用する。 サーバが goToNextQuestion を受信後ステータス情報の currentStatusWAITING_QUESTION に変更し再送する。