このドキュメントは、クライアント(フロントエンド)とサーバー(バックエンド)がWebSocketを介してリアルタイム通信を行う際に使用するJSONメッセージのフォーマットを定義します。
送受信されるすべてのメッセージは、以下の共通フォーマットに従います。
{
"type": "メッセージ種別名",
"payload": { ... }
}type: 送信されるメッセージの種類を識別するための文字列です。payload: メッセージ種別に応じたデータが含まれるオブジェクトです。
でサーバとのコネクションを確立します。
Websocketには認証が必要なので
のようにアクセスしないと拒否られると思います。
クライアントからサーバーへ送信されるメッセージです。
現在のプレイヤーがサイコロを振って駒を動かす際に送信します。
type:ROLL_DICEpayload: (空)特になんのデータもいりません。
例:
{
"type": "ROLL_DICE",
"payload": {}
}プレイヤーが分岐マスで進む方向を選択した際に送信します。これは、サーバーからの BRANCH_CHOICE_REQUIRED メッセージへの応答です。
type:SUBMIT_CHOICEpayload:selection(数値): プレイヤーが移動先として選択したタイルのID。
例:
{
"type": "SUBMIT_CHOICE",
"payload": {
"selection": 6
}
}プレイヤーがクイズの回答を選択した際に送信します。これは、サーバーからの QUIZ_REQUIRED メッセージへの応答です。
type:SUBMIT_QUIZpayload:selection(数値): プレイヤーが選択した選択肢のインデックス(0から始まる)。
例:
{
"type": "SUBMIT_QUIZ",
"payload": {
"selection": 0
}
}プレイヤーがギャンブルマスでの賭けの内容を決定した際に送信します。これは、サーバーからの GAMBLE_REQUIRED メッセージへの応答です。
type:SUBMIT_GAMBLEpayload:bet(数値): プレイヤーが賭ける金額。choice(文字列): プレイヤーの選択 ("High"または"Low")。
例:
{
"type": "SUBMIT_GAMBLE",
"payload": {
"bet": 50,
"choice": "High"
}
}サーバーから一人または複数のクライアントへ送信されるメッセージです。
プレイヤーがマスからマスへ移動した際に、すべてのクライアントに通知されます。
type:PLAYER_MOVEDpayload:userID(文字列): 移動したプレイヤーのID。newPosition(数値): プレイヤーが新たに移動した先のタイルID。
例:
{
"type": "PLAYER_MOVED",
"payload": {
"userID": "player1",
"newPosition": 5
}
}プレイヤーの所持金が変動した際に、すべてのクライアントに通知されます。
type:MONEY_CHANGEDpayload:userID(文字列): 所持金が変動したプレイヤーのID。newMoney(数値): プレイヤーの新しい所持金総額。
例:
{
"type": "MONEY_CHANGED",
"payload": {
"userID": "player1",
"newMoney": 150
}
}プレイヤーがサイコロを振った結果を通知します。
type:DICE_RESULTpayload:userID(文字列): サイコロを振ったプレイヤーのID。diceResult(数値): サイコロの目の数。
例:
{
"type": "DICE_RESULT",
"payload": {
"userID": "player1",
"diceResult": 4
}
}プレイヤーが分岐マスに止まり、選択が必要になった際に、対象のクライアントに送信されます。
type:BRANCH_CHOICE_REQUIREDpayload:tileID(数値): プレイヤーがいる分岐マスのタイルID。options(数値の配列): プレイヤーが選択可能な移動先のタイルIDのリスト。
例:
{
"type": "BRANCH_CHOICE_REQUIRED",
"payload": {
"tileID": 5,
"options": [6, 7]
}
}プレイヤーがクイズマスに止まった際に、対象のクライアントにクイズ情報を送信します。
type:QUIZ_REQUIREDpayload:tileID(数値): プレイヤーがいるクイズマスのタイルID。quizData(オブジェクト): クイズの詳細情報。id(数値): クイズID。question(文字列): 問題文。options(文字列の配列): 選択肢のリスト。answer_description(文字列): 正解・不正解時に表示する解説文。
例:
{
"type": "QUIZ_REQUIRED",
"payload": {
"tileID": 9,
"quizData": {
"id": 1,
"question": "日本の首都は?",
"options": ["大阪", "京都", "東京"],
"answer_description": "正解は東京です。" } }}プレイヤーがギャンブルマスに止まった際に、対象のクライアントに選択を要求します。
type:GAMBLE_REQUIREDpayload:tileID(数値): プレイヤーがいるギャンブルマスのタイルID。referenceValue(数値): High/Lowの基準となる値。
例:
{
"type": "GAMBLE_REQUIRED",
"payload": {
"tileID": 10,
"referenceValue": 3
}
}ギャンブルの結果を全クライアントに通知します。
type:GAMBLE_RESULTpayload:userID(文字列): ギャンブルを行ったプレイヤーのID。diceResult(数値): サイコロの目の合計。choice(文字列): プレイヤーの選択 ("High"または"Low")。won(真偽値): プレイヤーが勝ったかどうか。amount(数値): 変動した金額。newMoney(数値): ギャンブル後の最終的な所持金。
例:
{
"type": "GAMBLE_RESULT",
"payload": {
"userID": "player1",
"diceResult": 5,
"choice": "High",
"won": true,
"amount": 50,
"newMoney": 200
}
}プレイヤーがゴールした際に、全クライアントに通知します。
type:PLAYER_FINISHEDpayload:userID(文字列): ゴールしたプレイヤーのID。money(数値): ゴール時の最終所持金。
例:
{
"type": "PLAYER_FINISHED",
"payload": {
"userID": "player1",
"money": 500
}
}プレイヤーのステータス(結婚、子供、職業など)が変化した際に、全クライアントに通知します。
type:PLAYER_STATUS_CHANGEDpayload:userID(文字列): ステータスが変化したプレイヤーのID。status(文字列): 変化したステータスの種類 ("isMarried","hasChildren","job")。value(任意): 変化後の新しい値 (true,"professor"など)。
例:
{
"type": "PLAYER_STATUS_CHANGED",
"payload": {
"userID": "player1",
"status": "isMarried",
"value": true
}
}プレイヤーのアクションがエラーになったり、不正なメッセージを送信したりした場合に、対象のクライアントに送信されます。
type:ERRORpayload:message(文字列): 発生したエラーの内容を説明するメッセージ。
例:
{
"type": "ERROR",
"payload": {
"message": "無効なリクエストです。"
}
}このセクションでは、WebSocket以外の方法で提供されるAPIについて記述します。
- 説明: 全プレイヤーのランキングを取得します。
- 認証: 必要
- レスポンス:
200 OK:json [ { "playerID": "player1", "money": 1000, "finishedAt": "2023-10-27T10:00:00Z" }, { "playerID": "player2", "money": 900, "finishedAt": "2023-10-27T10:01:00Z" } ]
// 全プレイヤーのデータは流石にグロいので何かしら対策するかも
工場の排煙や自動車の廃棄バスから発生したNOxと揮発性有機化合物が太陽光の紫外線によって反応し、二次的に生成されるオゾンやPANなどの酸化生成物の総称である。