uniandes.cupi2.messengerAmigos.cliente
Class ClienteAmigos

java.lang.Object
  extended by uniandes.cupi2.messengerAmigos.cliente.ClienteAmigos
All Implemented Interfaces:
IClienteMessenger

public class ClienteAmigos
extends java.lang.Object
implements IClienteMessenger

Esta es la clase principal del cliente para el Messenger Amigos.
Esta clase es la que permite la comunicación del cliente con el servidor e implementa las acciones que se deben realizar cuando se reciben mensajes del servidor.
Cuando se quiere establecer una conversación con un amigo, esta es la clase que debe crear el objeto Conversacion.
Esta clase tiene además la responsabilidad de mantener la colección de amigos con su estado actualizado, tanto en la representación interna como en la interfaz.


Field Summary
 
Fields inherited from interface uniandes.cupi2.messengerAmigos.cliente.IClienteMessenger
AGREGAR_AMIGO, CONVERSACION, DESCONEXION, INICIO_CHARLA, LOGIN, LOGOUT, OFFLINE, ONLINE
 
Constructor Summary
ClienteAmigos(IInterfazCliente ventana, java.lang.String archivoConfiguracion)
          Construye el nuevo cliente
 
Method Summary
 void actualizarEstado(Usuario amigo)
          Actualiza el estado de un amigo.
 void agregarAmigo(java.lang.String nombreAmigo)
          Agrega un amigo al usuario, enviando un mensaje al servidor
 void conectar(java.lang.String usuario)
          Conecta el cliente al servidor y deja la aplicación lista para enviar y recibir mensajes.
 void conectarAConversacion(java.lang.String nombreAmigo, java.lang.String ipAmigo, int puertoAmigo)
          Este método es usado cuando se recibe una notificación que indica que se debe participar en una conversación con un amigo.
 Conversacion crearConversacionLocal(java.lang.String amigo)
          Este método es usado cuando el usuario local va a iniciar una conversación con un amigo.
 java.lang.String darNombreUsuario()
          Retorna el nombre del usuario conectado
 void desconectar()
          Cierra todas las conversaciones que están abiertas actualmente, limpia la lista de amigos y desconecta al cliente del servidor.
 void eliminarConversacion(Conversacion conv)
          Elimina de la colección de conversaciones la conversación indicada
 void enviarDesconexion()
          Envía un mensaje de LOGOUT al servidor.
 boolean estaConectado()
          Indica si el cliente está conectado al servidor
 java.lang.String metodo1()
          Método para la extensión 1
 java.lang.String metodo2()
          Método para la extensión2
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClienteAmigos

public ClienteAmigos(IInterfazCliente ventana,
                     java.lang.String archivoConfiguracion)
              throws java.lang.Exception
Construye el nuevo cliente

Parameters:
ventana - La ventana principal de la aplicación - ventana != null
archivoConfiguracion - El archivo que contiene la configuración para el cliente - archivoConfiguracion != null
Throws:
java.lang.Exception - Se lanza esta excepción si hay problemas con el archivo de configuración
Method Detail

estaConectado

public boolean estaConectado()
Indica si el cliente está conectado al servidor

Specified by:
estaConectado in interface IClienteMessenger
Returns:
Retorna true si el cliente está conectado

darNombreUsuario

public java.lang.String darNombreUsuario()
Retorna el nombre del usuario conectado

Specified by:
darNombreUsuario in interface IClienteMessenger
Returns:
nombreUsuario

conectar

public void conectar(java.lang.String usuario)
              throws java.io.IOException
Conecta el cliente al servidor y deja la aplicación lista para enviar y recibir mensajes.
Después de conectarse al servidor se envía la información del usuario (nombre y dirección ip) y se crea un hilo especial para leer los mensajes provenientes del servidor usando una instancia de la clase ThreadRecibirMensajesServidor.

Specified by:
conectar in interface IClienteMessenger
Parameters:
usuario - El nombre del usuario local que se va a conectar al servidor - usuario != null && usuario != ""
Throws:
java.io.IOException - Se lanza esta excepción si hay problemas en la comunicación.

enviarDesconexion

public void enviarDesconexion()
Envía un mensaje de LOGOUT al servidor. Este a su vez deberá cerrar la conexión con el cliente y enviar un mensaje de desconexión (DESCONEXION) para que, cuando sea recibido por el ThreadRecibirMensajesServidor, se inicie la desconexión del lado del cliente.

Specified by:
enviarDesconexion in interface IClienteMessenger

desconectar

public void desconectar()
                 throws java.io.IOException
Cierra todas las conversaciones que están abiertas actualmente, limpia la lista de amigos y desconecta al cliente del servidor.
pre: No hay nadie escribiendo ni leyendo del socket que comunica al cliente con el servidor.

Specified by:
desconectar in interface IClienteMessenger
Throws:
java.io.IOException - Se lanza esta excepción si hay problemas desconectando al cliente

agregarAmigo

public void agregarAmigo(java.lang.String nombreAmigo)
Agrega un amigo al usuario, enviando un mensaje al servidor

Specified by:
agregarAmigo in interface IClienteMessenger
Parameters:
nombreAmigo - El nombre del nuevo amigo - amigo != null

actualizarEstado

public void actualizarEstado(Usuario amigo)
Actualiza el estado de un amigo. Si no se encontraba en la lista de amigos, entonces es agregado.
Se debe actualizar también la interfaz.

Specified by:
actualizarEstado in interface IClienteMessenger
Parameters:
amigo - Los datos del amigo - amigo != null

crearConversacionLocal

public Conversacion crearConversacionLocal(java.lang.String amigo)
                                    throws java.io.IOException
Este método es usado cuando el usuario local va a iniciar una conversación con un amigo.
El proceso de crear una conversación se ejecuta en tres etapas principales.
1. Se envía al servidor un mensaje solicitando que se le envíe un mensaje al otro cliente para que entre a hacer parte de la conversación.
2. Se crea un objeto Conversacion que se encargará de recibir y manejar la conexión del cliente remoto.
3. Se retorna el objeto conversación creado para que se abra la ventana correspondiente en la interfaz.

Specified by:
crearConversacionLocal in interface IClienteMessenger
Parameters:
amigo - El nombre del amigo con el que se va a realizar la conversación - amigo != null && amigo hace parte de la lista de amigos
Returns:
Retorna el objeto conversación creado
Throws:
java.io.IOException - Se lanza esta excepción si hay problemas estableciendo la comunicación con el amigo

conectarAConversacion

public void conectarAConversacion(java.lang.String nombreAmigo,
                                  java.lang.String ipAmigo,
                                  int puertoAmigo)
                           throws java.io.IOException
Este método es usado cuando se recibe una notificación que indica que se debe participar en una conversación con un amigo.
El proceso para crear la conversación es el siguiente.
1. Se crear un objeto Conversacion que se encargará de recibir y manejar la conexión del cliente remoto.
2. El objeto Conversacion recién creado establece una comunicación con el otro cliente.
3. Se le notifica a la interfaz que se creó una Conversación para que se cree la ventana correspondiente en la interfaz.

Specified by:
conectarAConversacion in interface IClienteMessenger
Parameters:
nombreAmigo - El nombre del amigo con el que se va a realizar la conversación - nombreAmigo != null
ipAmigo - La dirección del amigo con el que se va a realizar la conversación - ipAmigo != null && ipAmigo != ""
puertoAmigo - El puerto del amigo al que se debe conectar el cliente
Throws:
java.io.IOException - Se lanza esta excepción si hay problemas estableciendo la comunicación con el amigo

eliminarConversacion

public void eliminarConversacion(Conversacion conv)
Elimina de la colección de conversaciones la conversación indicada

Specified by:
eliminarConversacion in interface IClienteMessenger
Parameters:
conv - La conversación que se va a eliminar - conv != null

metodo1

public java.lang.String metodo1()
Método para la extensión 1

Specified by:
metodo1 in interface IClienteMessenger
Returns:
respuesta1

metodo2

public java.lang.String metodo2()
Método para la extensión2

Specified by:
metodo2 in interface IClienteMessenger
Returns:
respuesta2