Diseño Chat Servidor

Descripción

El módulo chat se encarga de comunicar mediante mensajería instantánea a los distintos usuarios.
Desde el módulo del Servidor se gestionan todos los canales y las conversaciones de los Usuarios en los mismos.

Extiende de Thread y redefine run().

Dependencias

Módulo de comunicaciones

Usado para el envío y la recepción de los mensajes.

Módulos Común

Usado para implementar la clase IModulo y así pues definir los métodos comunes en ModuloChat.

Módulos Gestión de Usuarios Servidor
Se utiliza para obtener los datos de usuario y mantener actualizados los canales.

Uso del Módulo

Iniciar Servidor del Chat
Lo primero es crear una instancia del chat mediante la siguiente constructora,
*// public IModulo iniciarModulo(IGestorModulos gestor) //
a la que se le pasa una instancia del modulo de comunicaciones con el que trabajara el chat..

Su función básica es recibir los mensajes del módulo de comunicaciones y tratarlo como sea consecuente a través de una serie de comandos:
/susurro : envia un mensaje privado
/dice: envia un mensaje a todos los usuarios de un canal

Es mejor no usar los canales directamente sino encapsular su uso a través de las funciones de IModuloChat (ej: modulochat->crearCanal(id)).

A través de las Interfaces se da acceso a este módulo desde otros.
Para enviar/recibir mensajes se usa la clase ChatDatos que son las que normalmente se adjuntarán.

Finalizar Servidor del Chat
Al finalizar el servidor del chat se vacían y eliminan todos los canales que contiene usando la función
public void terminarModulo();

Otros recursos
public int recibirMensaje(int idUsuario, Mensaje mensaje);
Para tratar los mensajes recibidos del módulo de comunicaciones.

CLASE Canal IMPLEMENTA ICanal

Constituye el canal de chat.

Dispone de un atributo para limitaciones:
/**
* Limitación del chat
* 0: se puede todo
* 1: no se puede /susurro /zumbido
* 2: no se puede /dice
* 3: no se puede /dice /susurro /zumbido
*/
private int _limitacion;

Aparte de la constructora por defecto, contiene
public Canal(int idPadre);
*@param idPadre ID del creador del canal, coincide con el del propio canal
public Canal (int limitacion); Fija las limitaciones sobre el canal.
Métodos adicionales aparte de los de la interfaz:
public int getID()
public ArrayList getListaUsuarios()
public void setID(int id)
public void setListaUsuarios(ArrayList listaUsuarios)

(Setters y getters habituales)
public boolean estaVacio();
* Determina si la lista de usuarios está vacía
* @return Cierto, si es una lista vacía. Falso otherwise

INTERFAZ IModuloChat

Define el módulo de Chat. Métodos:
int crearCanalVacio();
* Crea un canal vacío
* @return Devuelve el id del canal creado
void eliminarCanal(int id);
* Eliminamos el canal con id
* @param id id del canal a eliminar
int addUser(String usuario);
* Añadimos un usuario a un canal.
* @param usuario Datos del usuario que vamos a añadir
* @return 0 en caso de éxito, <0 en caso de error
boolean buscarCanal(int idCanal);
* Buscamos si existe el canal idCanal
* @param idCanal
* @return True si el canal existe, false e.o.c.
int buscarUsuarioCanal(String idUsu);
* Buscamos el canal en el que se encuentra conectado idUsu
* @param idUsu Usuario
* @return Id del canal en el que se encuentra idUsu, <0 en caso de error.
int recibirMensaje(String idUsuario, Mensaje mensaje);
* Recibe un mensaje del módulo de comunicaciones para transmitirlo al canal correspondiente si es correcto
* @param idUsuario usuario emisor
* @param mensaje Mensaje
* @return 0 en caso de éxito.<0 en caso de error. (Ver tabla de errores)
int eliminarUsuario(String user, int idCanal);
* Elimina un usuario de un canal.
* @param user Datos del usuario que deseamos eliminar
* @param idCanal id del canal del que deseamos borrar el usuario
* @return 0 caso de éxito, <0 en caso de error (Ver tabla de errores).
UMLServidorChat.jpg