Files
mahjong-web/src/views/chengdu/socket/router/socketMessageRouter.ts
wsy182 cfc65070ea feat(game): 添加成都麻将游戏核心功能实现
- 定义游戏动作类型和载荷接口,包括摸牌、出牌、碰杠胡等操作
- 创建成都麻将游戏页面组件,集成桌面视图和玩家交互界面
- 实现游戏动作消息解析器,处理WebSocket消息转换为游戏动作
- 构建游戏状态管理store,管理玩家信息、回合状态和游戏流程
- 开发房间信息快照解析器,同步房间状态和玩家数据
- 实现房间状态快照解析,处理游戏阶段转换和玩家操作
2026-04-03 22:41:58 +08:00

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,
}
}