import { WebSocket } from "ws" import { IFireGemsStack, IMarket, IMarketStack, IPlayerBoard, IPlayerDiscard, IPlayerHand } from "./containers.js" export const ClientQueryType = { ACTION: "action", SUBSCRIBE: "subscribe", UNSUBSCRIBE: "unsubscribe", LOGIN: "login" } as const export const ServerQueryType = { CREATE: "create", ERROR: "error", ADD: "add", REMOVE: "remove", } as const export type ClientMessageType = typeof ClientQueryType[keyof typeof ClientQueryType] export type ServerMessageType = typeof ServerQueryType[keyof typeof ServerQueryType] export interface ClientMessage { uuid: string type: ClientMessageType target: string method: string args: { [key: string]: string } } export interface ServerMessage { type: ServerMessageType answer_to?: ClientMessage["uuid"] args: { [key: string]: any } } export interface IGameObject { uuid: string } export interface IEffect extends IGameObject { request_use: () => void } export interface ICard extends IGameObject { } export interface ITurn extends IGameObject { readonly effectsAvailables: Array readonly cardsLocked: Set discardMarkers: number fuckUMarkers: number damageReserve: number goldReserve: number currentDiscardEffect: IEffect request_lockCard: (card: ICard) => void } export interface IPlayer extends IGameObject { readonly board: IPlayerBoard readonly hand: IPlayerHand readonly discard: IPlayerDiscard ready: boolean username: string user: IUser request_setReady: (value: boolean) => void } export interface ITeam extends IGameObject { readonly players: Set color: string health: number request_damage: (amount: number) => void request_join: (player: IPlayer) => void } export interface IGame extends IGameObject { readonly marketStack: IMarketStack readonly market: IMarket readonly fireGems: IFireGemsStack readonly owner: IPlayer currentTurn?: ITeam started: boolean changeRules: () => void end: () => void } export interface IUser extends IGameObject { } export interface ILobby extends IGameObject { }