- 定义游戏动作类型和载荷接口,包括摸牌、出牌、碰杠胡等操作 - 创建成都麻将游戏页面组件,集成桌面视图和玩家交互界面 - 实现游戏动作消息解析器,处理WebSocket消息转换为游戏动作 - 构建游戏状态管理store,管理玩家信息、回合状态和游戏流程 - 开发房间信息快照解析器,同步房间状态和玩家数据 - 实现房间状态快照解析,处理游戏阶段转换和玩家操作
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import type { PlayerHandlerApi, RoomHandlerApi, StatusHandlerApi, TurnHandlerApi } from '../types'
|
|
|
|
interface SocketMessageRouterDeps {
|
|
roomHandlers: RoomHandlerApi
|
|
playerHandlers: PlayerHandlerApi
|
|
turnHandlers: TurnHandlerApi
|
|
statusHandlers: StatusHandlerApi
|
|
}
|
|
|
|
type SocketRouteHandler = (message: unknown) => void
|
|
|
|
export function createSocketMessageRouter(deps: SocketMessageRouterDeps) {
|
|
const routes = new Map<string, SocketRouteHandler[]>([
|
|
['GET_ROOM_INFO', [deps.roomHandlers.handleRoomInfoResponse]],
|
|
['ROOM_INFO', [deps.roomHandlers.handleRoomInfoResponse]],
|
|
['ROOM_STATE', [deps.roomHandlers.handleRoomStateResponse]],
|
|
['PLAYER_HAND', [deps.playerHandlers.handlePlayerHandResponse]],
|
|
['PLAYER_ALLOW_ACTION', [deps.turnHandlers.handlePlayerAllowAction]],
|
|
['PLAYER_TURN', [deps.turnHandlers.handlePlayerTurn]],
|
|
['NEXT_TURN', [deps.turnHandlers.handlePlayerTurn]],
|
|
['ACTION_ACK', [deps.statusHandlers.handleActionAck]],
|
|
['ACTION_ERROR', [deps.statusHandlers.handleActionError]],
|
|
['DING_QUE_COUNTDOWN', [deps.turnHandlers.handleDingQueCountdown]],
|
|
['PLAYER_READY', [deps.playerHandlers.handleReadyStateResponse]],
|
|
['PLAYER_DING_QUE', [deps.playerHandlers.handlePlayerDingQueResponse]],
|
|
])
|
|
|
|
function route(normalizedType: string, message: unknown): void {
|
|
const handlers = routes.get(normalizedType)
|
|
if (!handlers) {
|
|
return
|
|
}
|
|
|
|
handlers.forEach((handler) => handler(message))
|
|
}
|
|
|
|
return {
|
|
route,
|
|
}
|
|
}
|