caro5 / shared /types.ts
Pedro de Carvalho
Add shared checks
ea1fe68
Raw
History Blame Contribute Delete
2.85 kB
export type MessageType =
| 'CREATE_ROOM'
| 'ROOM_CREATED'
| 'JOIN_ROOM'
| 'ROOM_STATE'
| 'PLACE_MOVE'
| 'MOVE_APPLIED'
| 'MOVE_REJECTED'
| 'GAME_WIN'
| 'GAME_DRAW'
| 'PLAYER_JOINED'
| 'PLAYER_LEFT'
| 'REQUEST_REMATCH'
| 'REMATCH_ACCEPTED'
| 'CHANGE_NAME'
| 'NAME_CHANGED'
| 'ERROR'
| 'PLAYER_ONLINE'
| 'PLAYER_OFFLINE'
| 'PLAYER_RECONNECTING'
| 'SET_SYMBOL'
| 'SYMBOL_CHANGED'
| 'GET_MATCHES'
| 'MATCHES_DATA'
| 'GET_MATCH'
| 'MATCH_DATA'
| 'GET_GENERATED_REPLAYS'
| 'GENERATED_REPLAYS_DATA'
| 'GET_GENERATED_REPLAY'
| 'GENERATED_REPLAY_DATA'
| 'GET_LEADERBOARD'
| 'LEADERBOARD_DATA'
| 'REGISTER_ENGINE'
| 'ENGINE_REGISTERED'
| 'ENGINE_CREATE_ROOM'
| 'ENGINE_JOIN_ROOM'
| 'ENGINE_ROOM_JOINED'
| 'ENGINE_LIST_ROOMS'
| 'ENGINE_ROOMS_LIST'
| 'SWAP2_CHOICE'
| 'REQUEST_SWAP'
export interface WSMessage {
type: MessageType
payload: unknown
}
export interface RoomState {
roomId: string
players: string[]
board: SerializedBitBoard
currentPlayer: number
status: 'waiting' | 'active' | 'win' | 'draw'
playerIndex: number
scores?: RoomScores
symbols?: [string, string]
boardSize?: number
}
export interface MovePayload {
x: number
y: number
}
export interface MoveAppliedPayload {
x: number
y: number
player: number
symbol: string
currentPlayer: number
}
export interface GameWinPayload {
playerId: string
cells: { x: number; y: number }[]
}
export interface GameDrawPayload {
message?: string
}
export interface RoomScores {
[playerId: string]: { wins: number; losses: number; draws: number }
}
export interface ErrorPayload {
message: string
}
export interface MoveRejectedPayload {
message: string
x: number
y: number
}
export interface PlayerPresencePayload {
playerIndex: number
playerName: string
}
export interface SymbolPayload {
symbol: string
}
export interface GameRules {
swap2?: boolean
noOverlines?: boolean
boardSize?: number
}
export interface Cell {
playerId: string
symbol: string
timestamp: number
}
export interface SerializedBitBoard {
boardSize: number
words: number[]
occupiedCount: number
}
export interface RegisterEnginePayload {
name: string
}
export interface EngineRegisteredPayload {
engineId: string
}
export interface EngineCreateRoomPayload {
engineName: string
}
export interface EngineJoinRoomPayload {
roomId: string
engineName: string
}
export interface EngineRoomJoinedPayload {
roomId: string
playerIndex: number
roomState: RoomState
}
export interface EngineRoomsListPayload {
rooms: { roomId: string; engineName: string }[]
}
export interface GameExportData {
id: string
player1: string
player2: string
winner: number | null
moves: { x: number; y: number; player: number; symbol: string }[]
createdAt: string
}