Diseño del Módulo de Juegos
ModuloJuegos.jpg

Este módulo se encuentra en el paquete IStation.Modulos.Juegos.Servidor. Para implementar el módulo de juegos se han creado las dos clases necesarias para definir cualquier módulo:

ModuloJuegos

La clase ModuloJuegos es la encargada de administrar todas las partidas que se juegan a cada uno de los juegos del sistema. La funcionalidad de cada juego concreto se encuentra en módulos externos, que la clase ModuloJuegos se encarga de cargar al inicio para tenerlas disponibles cuando las utilice. Esta clase también es la que va a facilitar a las partidas de los juegos el acceso a la base de datos (para realizar algunas acciones concretas), la comunicación con los clientes situados en ordenadores remotos y el almacenamiento en ficheros de los registros de error e información de depuración.

La clase ModuloJuegos utiliza otros módulos como el módulo de comunicaciones, el de bases de datos y el módulo de chat. En concreto, utiliza las entidades IModuloComunicaciones, IModuloChat, IModuloBaseDeDatos e IModuloLog.
Al tratarse de una clase que administra las partidas, un objeto de ModuloJuegos contiene un conjunto de referencias a objetos de la clase Partida.

Para las funciones de carga dinámica de los distintos juegos, utilizará también la clase ClassLoader y otras clases pertenecientes al JDK.

Detalles de la implementación:

La clase tiene tres java.util.HashMap:

  • Uno para relaciones identificadores de jugador con identificadores de partida, para saber en qué partida está jugando cada jugador.
  • Otro para relacionar el identificador de la partida con la instancia concreta de la misma.
  • Un último para relacionar los nombres de los juegos con sus clases iniciadoras para llevar a cabo la carga dinámica.

Descripción de los métodos:

Métodos de IModuloJuegos

  • java.lang.String consultarNombreJugador(int idCliente)

Devuelve el nombre con el que se registró el cliente con identificador idCliente.
Para obtener este dato consulta con el módulo de comunicaciones.

  • int consultarPuntosJugador(int idCliente)

Devuelve la cantidad de puntos que tiene el cliente con identificador idCliente.
Para obtener este dato consulta con el módulo de comunicaciones.

  • void eliminaPartida(int idPartida)

Este método se utiliza para notificar el fin de una partida. El de juegos procederá entonces a elmiminar todas las referencias a esa partida, de forma que dejará de enviarles mensajes.

  • void enviarMensaje(int idCliente, java.lang.Object msg)

Permite a las partidas enviar mensajes al cliente que se encuentra en un ordenador remoto. El objeto que se envía al cliente debe ser de un tipo que éste pueda reconocer.
Este método utiliza las constructoras de las clases Mensaje y MetaDatos.

  • void partidaIniciada(int idPartida)

Método para que la partida avise al modulo juegos que ya está iniciada.
Este método utiliza la entidad IModuloBaseDeDatos.

  • void sumarPuntosJugador(int ptos, int idCliente)

Suma a los puntos de un usuario (jugador) una cantidad positiva o negativa. Si el resultado de sumar los puntos a un usuario es negativo, entonces el usuario se queda con 0 puntos.
Este método utiliza el módulo de comunicaciones para llevar a cabo la acción.

  • ILogger getLogger()

Devuelve una instancia del objeto de registro de eventos y errores.

Métodos de IModulo

  • java.lang.Object salvarEstado()

Devuelve un objeto que contiene todos los datos necesarios para guardar el estado actual del módulo.

  • void terminarModulo()

Realiza las acciones necesarias para finalizar el módulo.

Métodos de IReceptorEventosComunicaciones

  • void mensajeRecibido(int idCliente, IStation.Modulos.Comunicaciones.Mensaje msg)

Acepta mensajes del módulo de comunicaciones y los trata adecuadamente, tratándolos o remitiéndolos a la partida correspondiente.
Este método utiliza los métodos aceptarDatos y anadeCliente de la clase Partida.

  • void usuarioDesconectado(int idCliente)

Permite al módulo de juegos recibir notificaciones de que un cliente ha perdido la conexión con el servidor. Esta desconexión ha podido ser voluntaria o involuntaria.
Utiliza el método aceptarDatos de la clase Partida.

InicioModuloJuegos

Esta clase actúa como un creador de instancias de la clase ModuloJuegos, ocultando así las constructoras y permitiendo que el Servidor haga una carga dinámica de los distintos módulos.

Descripción de los métodos:

  • IStation.Modulos.IModulo iniciarModulo(IStation.Modulos.IGestorModulos gestor)

Este método obtiene una instancia de la clase ModuloJuegos.
Utiliza la entidad IGestorModulos para obtener instancias de las entidades que necesita el módulo de juegos: el módulo de comunicaciones, el de base de datos y el de chat.

  • IStation.Modulos.IModulo iniciarModulo(java.lang.Object estado, IStation.Modulos.IGestorModulos gestor)

Este método obtiene una instancia de la clase ModuloJuegos.
Utiliza la entidad IGestorModulos para obtener instancias de las entidades que necesita el módulo de juegos: el módulo de comunicaciones, el de base de datos y el de chat.
Este método permite restablecer el estado previamente guardado a través del argumento estado.

Relaciones con otros elementos

Como ya se ha dicho, el módulo de juegos ocupa una posición muy importante dentro de la arquitectura, comunicándose y sincronizando otros elementos para el correcto funcionamiento de todo el sistema. El siguiente diagrama UML detalla los componentes que se relacionan con el Módulo de Juegos.

ModuloJuegos_Completo.jpg