uniandes.cupi2.messengerAmigos.servidor
Class ManejadorCliente

java.lang.Object
  extended by uniandes.cupi2.messengerAmigos.servidor.ManejadorCliente

public class ManejadorCliente
extends java.lang.Object

Esta clase se encarga de manejar la comunicación entre el servidor y un cliente.
A través de esta clase el servidor puede enviar mensajes a un cliente que esté conectado.
Una instancia de la clase ThreadRecibirMensajesCliente es la encargada de recibir los mensajes enviados por el cliente, pero en esta clase es donde se implementa la lógica para ejecutar las acciones que corresponden a los mensajes enviados.


Constructor Summary
ManejadorCliente(IServidorAmigos servidorAmigos, java.net.Socket socket)
          Construye el manejador que se encargará de la comunicación con un cliente.
 
Method Summary
 void agregarAmigo(java.lang.String nombreAmigo)
          Agrega un amigo al usuario.
 java.lang.String darNombre()
          Retorna el nombre del usuario asociado a este manejador
 void desconectarUsuario()
          Desconecta al usuario, notifica a todas las personas que lo conocen y destruye el manejador de clientes.
 void enviarConversacionAmigo(java.lang.String nombreAmigo)
          Envía a un amigo, a través del servidor, un mensaje para iniciar una conversación
 void enviarEstadoAmigo(Usuario amigo)
          Envía al usuario el estado de uno de sus amigos
 void iniciarConversacion(java.lang.String nombreAmigo, java.lang.String direccionIp, int puerto)
          Envía al usuario un mensaje indicando que un amigo quiere que se inicie una conversación
 void iniciarManejador()
          Inicia el manejador, leyendo el mensaje inicial del cliente, enviandole la información de sus amigos y luego activando el Thread que va a recibir los otros mensajes que envíe.
 java.lang.String toString()
          Retorna una cadena con el nombre y la dirección IP de los clientes que están conectados actualmente
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ManejadorCliente

public ManejadorCliente(IServidorAmigos servidorAmigos,
                        java.net.Socket socket)
                 throws java.io.IOException
Construye el manejador que se encargará de la comunicación con un cliente.
Al construir el manejador se preparan también los streams que serán usados para la comunicación con el cliente.

Parameters:
servidorAmigos - Es el servidor en el que se encuentra este manejador - servidorAmigos != null
socket - Es el socket que está conectado al cliente - socket != null
Throws:
java.io.IOException - Se lanza esta excepción si hay problemas estableciendo la comunicación con el cliente
Method Detail

darNombre

public java.lang.String darNombre()
Retorna el nombre del usuario asociado a este manejador

Returns:
nombreUsuario

iniciarManejador

public void iniciarManejador()
                      throws MessengerException,
                             java.io.IOException
Inicia el manejador, leyendo el mensaje inicial del cliente, enviandole la información de sus amigos y luego activando el Thread que va a recibir los otros mensajes que envíe.
Los pasos de la inicialización son:
1. Recibir el mensaje inicial del cliente (que tiene la información de conexión del usuario)
2. Iniciar el hilo que se encargará de recibir los mensajes enviados por el cliente (ThreadRecibirMensajesCliente)
3. Revisar en la base de datos si el usuario ya existe y en caso negativo crear el nuevo usuario
4. Cambiar el estado del usuario en la base de datos
5. Enviar a las personas que conocen al usuario la notificación de que ahora está online
6. Enviar al usuario notificaciones con el estado de sus amigos

Throws:
MessengerException - Se lanza esta excepción si hay un problema con los mensajes del cliente
java.io.IOException - Se lanza esta excepción si hay problemas en la comunicación

desconectarUsuario

public void desconectarUsuario()
                        throws java.io.IOException
Desconecta al usuario, notifica a todas las personas que lo conocen y destruye el manejador de clientes.
pre: No hay nadie leyendo ni escribiendo en los streams; el thread que recibe los mensajes del cliente ya va a terminar su ejecución

Throws:
java.io.IOException - Se lanza esta excepción si hay problemas desconectando el socket

agregarAmigo

public void agregarAmigo(java.lang.String nombreAmigo)
Agrega un amigo al usuario. Actualiza al base de datos y envía al cliente el estado del amigo.

Parameters:
nombreAmigo - El nombre del amigo que se va a agregar - nombreAmigo != null && nombreAmigo != ""

enviarConversacionAmigo

public void enviarConversacionAmigo(java.lang.String nombreAmigo)
Envía a un amigo, a través del servidor, un mensaje para iniciar una conversación

Parameters:
nombreAmigo - El nombre del amigo con el que se va a establecer la conversación - nombreAmigo != null && nombreAmigo != ""

iniciarConversacion

public void iniciarConversacion(java.lang.String nombreAmigo,
                                java.lang.String direccionIp,
                                int puerto)
Envía al usuario un mensaje indicando que un amigo quiere que se inicie una conversación

Parameters:
nombreAmigo - El nombre del amigo al que se debe conectar el usuario - amigo != null
direccionIp - La direccion ip del amigo con el que se va a establecer la conversación - direccionIp != null
puerto - El puerto al que se debe conectar el usuario

enviarEstadoAmigo

public void enviarEstadoAmigo(Usuario amigo)
Envía al usuario el estado de uno de sus amigos

Parameters:
amigo - El amigo del que se quiere enviar la información - amigo != null

toString

public java.lang.String toString()
Retorna una cadena con el nombre y la dirección IP de los clientes que están conectados actualmente

Overrides:
toString in class java.lang.Object
Returns:
cadena