Skip to main content
Version: Current

WebSocket 事件

连接

const socket = io(NEXT_PUBLIC_API_BASE, {
auth: { token: session.user.accessToken },
transports: ['websocket', 'polling'],
});

JWT: issuer=lottery-frontend, audience=lottery-backend


Client → Server

submit_answer

{ "answer": "A" }

响应: answer_submitted | answer_error


Server → Client

游戏事件

事件说明
game_state初始/更新状态
game_start重置后
new_question新题
countdown_updateDisplay 倒计时
player_count_update人数变化
round_result轮次结束
eliminated淘汰名单
winner{ winnerEmail, winnerDisplay }
tie{ finalists, finalistsDisplay }
redirect拒绝中途加入后 disconnect
game_resetAdmin 重置(前端清空已发题标记)

登录码事件(新增)

事件受众Payload
login_code_published全 room(尤其 Show){ "code": "123456" }
login_code_status单 socket(Show 重连){ "code": "123456" }
login_code_closed全 room无 body

角色与 payload

角色game_state 类型
Admin / DisplayRoomState(含 answers 票数)
PlayerPlayerGameState(含个人 status)

Player 看不到 A/B 全局票数(防作弊)。


订阅建议

Show: login_code_*, game_state, new_question, countdown_update, winner, tie, round_result

Player: game_state, new_question, eliminated, winner, tie, redirect

Admin: 全部 RoomState 类 + game_reset