Módulo de Juegos - Protocolo

Introducción

A grandes rasgos, el protocolo del módulo de juegos se apoya en los servicios proporcionados por el módulo de comunicaciones y proporciona funcionalidad para crear instancias de partidas, asignar jugadores a partidas y servir de enlace entre el servidor de una partida determinada y sus jugadores.

Descripción del protocolo

Cada una de las tres funcionalidades que proporciona este protocolo se procesa de manera diferente:

Crear una partida

Un cliente envía al servidor una solicitud para crear una partida, en la cual van incluidos los datos de la partida. El servidor procesa la solicitud, crea la partida si es posible e informa al cliente del resultado de la solicitud (aceptada / rechazada).

Incorporarse a una partida

Un cliente envía al servidor una solicitud para incorporarse a una partida. Dicha partida debe haber sido creada con anterioridad. La solicitud de incorporación será procesada por el módulo de juegos (en colaboración con la instancia de la partida concreta) y enviará una respuesta al cliente indicando si la solicitud ha sido aprobada.

Comunicarse con una partida

Un cliente desea envía unos datos correspondientes a una partida en curso. El cliente debe ser un jugador admitido en la partida con la que desea comunicarse. El módulo de juegos determina a qué partida debe enviar los datos transmitidos (en función del identificador de conexión proporcionado por el módulo de comunicaciones, de forma que si un cliente está en varias partidas, puede diferenciar si los datos corresponden a una u otra). Los datos son encolados para ser procesados por la partida correspondiente.
En este caso no se envía ningún tipo de confirmación ni tampoco de notificación de error en caso de que el jugador no pertenezca a ninguna partida.

Desconectarse de una partida

Un cliente puede enviar una solicitud para desconectarse de una partida. El módulo de juegos interrumpirá las comunicaciones entre el cliente y la partida a la que perteneciese. La comunicación se podrá restablecer utilizando la instrucción de incorporarse a una partida.
Cuando se corta la comunicación por factores externos, las acciones que se toman son las mismas que al utilizar este comando.

Implementación del protocolo

Crear una partida

El cliente envía a través del módulo de comunicaciones un mensaje, utilizando para los metadatos el identificador de protocolo correspondiente (el número 1, que identifica el protocolo para los juegos) y como comando la cadena de texto creacion. Los datos deberán ser un un objeto cuya clase herede de la clase abstracta DatosPartida.
El módulo de juegos tratará de crear una partida con los datos proporcionados. Como respuesta, enviará un mensaje con los mismos metadatos y como datos, un objeto de la clase Integer cuyo valor es el identificador de la partida, si éste valor es mayor o igual a cero, ó el valor -1 para indicar un fallo en la creación de la partida.

Incorporarse a una partida

Los metadatos del mensaje que debe enviar el cliente para unirse a una partida incluyen el identificador de protocolo adecuado y el comando incorporacion. Como datos, se debe enviar un array con dos elementos: el primero de ellos será un objeto de la clase Integer con el identificador de la partida a la que se desea unirse. El segundo será un Boolean que indica si se desea unirse sólamente como espectador (observador).
El módulo de juegos enviará un mensaje con el mismo id. de protocolo y comando, cuyo dato será un array con dos elementos: un objeto de la clase Boolean que indica la aceptación de la solicitud y un entero que, en caso de haberse aceptado la solicitud, indica mediante un Integer el canal de chat al que debe unirse el módulo de chat. Si ocurre algún error al asignar un canal a la partida, se devolverá el valor -1.
Cuando un cliente es admitido en una partida, el módulo de juegos asocia el identificador de la conexión del cliente (proporcionada por el módulo de comunicaciones) con el identificador de la partida a la que se ha unido, de manera que en futuras transmisiones no es necesario especificar la partida con la que desea establecerse la comunicación.

Comunicarse con una partida

El cliente envía un mensaje indicando en los metadatos el protocolo adecuado y el comando transmision. El contenido de los datos debe ser un objeto de la clase MensajePartida. En este tipo de comunicación, no se envía ninguna confirmación por parte del módulo de juegos.

Desconectarse de una partida

El mensaje que el cliente debe enviar para desconectarse solo requiere metadatos: el protocolo adecuado y el comando desconexion. El módulo de juegos averiguará en qué partida está jugando el cliente y eliminará al cliente de dicha partida.