Skip to content

Referencia API Socket.IO

La comunicación entre cliente y servidor se realiza exclusivamente mediante eventos de Socket.IO.

Estos eventos gestionan la entrada y salida de jugadores en las salas de juego.

EventoDirecciónDescripciónPayload
room:newCliente -> ServidorCrea una nueva sala.{ player: PlayerProfile, visibility: 'public' | 'private' }
room:joinCliente -> ServidorUne a un jugador a una sala existente.{ roomId: string, player: PlayerProfile }
room:leaveCliente -> ServidorUn jugador abandona la sala.{ roomId: string, playerId: string }
room:get_allCliente -> ServidorSolicita la lista de salas públicas.void
rooms:listServidor -> ClienteDevuelve la lista de salas disponibles.RoomPublicInfo[]
room:joinedServidor -> ClienteConfirma que se ha unido a la sala y envía datos iniciales.Room
EventoDirecciónDescripciónPayload
player:identifyCliente -> ServidorIdentifica el socket con un playerId persistente.{ playerId: string }
player:reconnectCliente -> ServidorIntenta reconectar un jugador tras una desconexión.{ playerId: string }

El núcleo de la interacción de la partida.

EventoDescripciónPayload
game:startEl Host inicia la partida.{ roomId: string }
game:drawEl jugador roba una carta de la baraja.{ roomId: string }
game:play_cardJuega una carta de la mano.{ roomId: string, cardId: string, target?: Target }
game:discardDescarta una o varias cartas.{ roomId: string, cardIds: string[] }
game:end_turnFinaliza el turno voluntariamente (si aplica).{ roomId: string }
EventoDescripciónPayload
game:stateBroadcast. Estado público del tablero. Se emite tras cada cambio.GamePublicState
game:handUnicast. Envía la mano privada al jugador específico.{ roomId, playerId, hand: Card[] }
game:errorUnicast. Notifica un error o acción inválida.{ code: string, message: string }
game:endBroadcast. Notifica el fin de la partida y el ganador.{ roomId, winner: Player }

Dependiendo de la carta, el target puede variar:

Jugar sobre un órgano:

{
"playerId": "target-player-id",
"organId": "target-organ-id"
}

Jugar sobre un jugador (ej: Error Médico):

{
"playerId": "target-player-id"
}

Trasplante (Intercambio):

{
"a": { "playerId": "p1", "organId": "o1" },
"b": { "playerId": "p2", "organId": "o2" }
}