import type {ActionButtonState} from "./types.ts" import {wsClient} from "../ws/client.ts" export function sendGameAction( params: { type: ActionButtonState['type'] userID: string roomId: string selectedTile?: string | null }, ctx: { actionPending: { value: boolean } logWsSend: (msg: any) => void pushWsMessage: (msg: string) => void } ): void { const {type, userID, roomId, selectedTile} = params const {actionPending, logWsSend, pushWsMessage} = ctx // 简单登录判断 if (!userID) { console.log('当前用户未登录') return } const payload: Record = {} // 出牌 if (type === 'discard' && selectedTile) { payload.tile = selectedTile payload.discard_tile = selectedTile payload.code = selectedTile } actionPending.value = true const message = { type, sender: userID, target: 'room', roomId, seq: Date.now(), payload, } logWsSend(message) wsClient.send(message) pushWsMessage(`[client] 请求${type}`) } export function sendStartGame(params: { userID: string roomId: string canStartGame: boolean startGamePending: { value: boolean } logWsSend: (msg: any) => void pushWsMessage: (msg: string) => void }): void { const { userID, roomId, canStartGame, startGamePending, logWsSend, pushWsMessage } = params if (!canStartGame || startGamePending.value) { return } if (!userID) { return } startGamePending.value = true const message = { type: 'start_game', sender: userID, target: 'room', roomId, seq: Date.now(), payload: {}, } logWsSend(message) wsClient.send(message) pushWsMessage(`[client] 请求开始游戏`) } export function sendLeaveRoom(params: { userID: string roomId: string wsError: { value: string } leaveRoomPending: { value: boolean } logWsSend: (msg: any) => void pushWsMessage: (msg: string) => void }): boolean { const { userID, roomId, wsError, leaveRoomPending, logWsSend, pushWsMessage } = params if (!userID) { wsError.value = '缺少当前用户 ID,无法退出房间' return false } if (!roomId) { wsError.value = '缺少房间 ID,无法退出房间' return false } leaveRoomPending.value = true const message = { type: 'leave_room', sender: userID, target: 'room', roomId: roomId, seq: Date.now(), payload: {}, } logWsSend(message) wsClient.send(message) pushWsMessage(`[client] 请求退出房间`) return true }