跳到主要内容
版本:Current

代码架构

分层

Pages/Components → NextAuth / fetch / Socket.IO

Express Routes + Socket Handlers

GameManager | LoginCode | PlayerRegistry

Redis (+ PostgreSQL 归档)

认证双路径

GameManager

单例,负责轮次、淘汰、倒计时、winner/tie(调用 getDisplayName / resolveDisplayNames)。

resetGame() 额外调用:

  • clearLoginCode()
  • clearPlayerRegistry()

LoginCode 模块

  • publishLoginCode() — SET redis + emit login_code_published
  • validateLoginCode() — 字符串相等比较
  • clearLoginCode() — DEL + emit login_code_closed
  • emitLoginCodeStatus(socketId) — Show 重连

PlayerRegistry 模块

  • assignPlayerIdentity(playerId) — INCR seq 或复用已有编号
  • getDisplayName(internalEmail) — 缓存优先
  • clearPlayerRegistry() — SCAN 删除 player:* keys

Socket 角色分发

  • Admin/Display → RoomState
  • Player → PlayerGameState(无全局票数)
  • Display 连接 → 额外 emitLoginCodeStatus + winner/tie display 字段

前端状态

React hooks + Socket,无全局 store。Admin 单独维护 loginCodeStatus: idle | published

类型同步

frontend/src/types/index.tsbackend/src/types/index.ts 需手动对齐(含 LoginCodePayload, winnerDisplay)。