Introducción
Este protocolo abarca las comunicaciones básicas entre un jugador de una partida y el servidor de dicha partida. Este protocolo se apoya en el protocolo del módulo de juegos, que es el que se encarga de crear las partidas y de añadir jugadores a éstas.
Descripción
El protocolo de la partida comunica todos los clientes de una partida (los jugadores) con el servidor, lo cual requiere que los clientes ya pertenezcan a la partida correspondiente, de lo cual se encarga el protocolo del módulo de juegos.
Este protocolo tiene diferentes utilidades:
Notificación de incorporación
Informa a los clientes que ya están en la partida de la incorporación de un juevo jugador.
Solicitud / notificación de cambio de turno
Un cliente puede solicitar que el turno pase al siguiente jugador (en el orden que corresponda según el juego). El servidor comprueba si el cliente que solicitó el cambio estuviese en posesión del turno y, a continuación, informa a todos los clientes de quién es el nuevo poseedor del turno.
Solicitud / notificación de inicio de la partida
Según el juego, uno o más clientes tendrán la capacidad de iniciar la partida. El cliente que desee iniciar la partida envía una solicitud que será comprobada por el servidor. Una vez iniciada la partida, se informa a todos los clientes del inicio, notificando a quién corresponde el primer turno.
Notificación de abandono
Informa a los clientes que continúan en la partida que un jugador ha abandonado.
Notificación de final de la partida
Informa a los clientes que la partida ha concluido.
Implementación
Los mensajes que envía la partida abstracta son objetos de la clase MensajePartida. Estos objetos contienen un String que describe el tipo de evento (definido por el usuario, con una excepción) y unos datos (también definidos por el usuario).
Los mensajes que pertenecen al protocolo de la partida tienen como evento la cadena control, que está reservada para el protocolo y no puede ser usada por los usuarios. En este caso, el dato del mensaje es un objeto de la clase ControlDePartida.
La clase ControlDePartida contiene tres campos: usuario, accion e info. El contenido de estos campos se detalla en la siguiente tabla:
Acción | Sentido | accion | usuario | info |
---|---|---|---|---|
Notificación de incorporación | Servidor a uno o más clientes | INCORPORACION | Nombre del usuario incorporado | Boolean indicando si es un observador |
Solicitud de cambio de turno | Cliente a servidor | FIN_DE_TURNO | null | null |
Notificación de cambio de turno | Servidor a todos los clientes | FIN_DE_TURNO | Nombre del usuario que está en posesión del turno tras el cambio | null |
Solicitud de inicio de la partida | Cliente a servidor | INICIO_PARTIDA | null | null |
Notificación de inicio de la partida | Servidor a todos los clientes | INICIO_PARTIDA | Nombre del usuario que está en posesión del primer turno | null |
Notificación de abandono | Servidor a todos los clientes | ABANDONO | Nombre del usuario que abandona | null |
Notificación de fin de la partida | Servidor a todos los clientes | FINALIZACION | null | null |
Nota: en raras ocasiones puede ocurrir que el servidor envíe una notificación de incorporación duplicada. Como el nombre de usuario es único, es fácil filtrar las notificaciones redundantes e ignorarlas.