ELO 330 - PROGRAMACION DE SISTEMAS
SEGUNDO SEMESTRE 2017

Chat con capacidades especiales


JOHANNES ROTHKEGEL SIELFELD
JUAN PABLO ROTHKEGEL IDE


Contenidos:

  1. Descripción del problema
  2. Análisis del problema
  3. Pruebas
  4. Conclusiones
  5. Descarga

1.- DESCRIPCIÓN DEL PROBLEMA

Nuestra idea es hacer un chat en el cual tu puedes elegir entre comunicarte con uno o muchos clientes a la vez. Esto quiere decir que el cliente le hablara a un usuario o a muchos (algo parecido al broadcast o los grupos de fb). Para lograr esto se usará broadcast por defecto y aparte se implementará el prefijo @ para hablar con un cliente en específico. A su vez se le agregara un bot, el cual podra interactuar durante la conversación si este es invocado.
Esto podría ayudar a la realización de tareas y proyectos de parte de los alumnos de electrónica, ya que será un chat cerrado y con posibilidades de usar la programación de sistemas para incluir interacción con programas que corren en la máquina.
En este caso se integró el chat con Octave lo que permite realizar una infinidad de tareas relacionadas a nuestro rubro de trabajo.

2.- ANÁLISIS DEL PROBLEMA

Para desarrollar este proyecto se usaron los contenidos vistos en este curso, implementados en Java, ya que encontramos que Java ayuda a que el trabajo sea más limpio y rápido..
Se crearon los siguientes archivos:

ChatMessage

En el chat cada tipo de mensaje está asociado a un número, para poder distinguir que mensaje es.
Se implmentó:

Por lo que esta clase se encarga de distinguir cada tipo de mensaje, la cual lo envía al servidor, para poder tomar la acción correspondiente.

Client

La clase Client se conecta al servidor a través de un socket. Esta genera su Data Stream con:

Luego crea una hebra para escuchar del servidor y envía username como string, todo el resto se envía como objeto de ChatMessage.

Para enviar el resto de mensajes existe un metodo llamado:

que recibe como parámetro un objeto tipo ChatMessage y lo envía:

Para escuchar desde el servidor se implementó la clase:

La que crea una hebra para poder realizar esta función.

ClientGUI

Esta clase es muy similar a Client solo que tiene todo el manejo de la interfaz gráfica.

Fig1. - Interfaz Gráfica Cliente

Como se puede apreciar en la figura 1, existen distintos tipos de botones y zonas de ingreso de texto.

ClientOctave

Esta clase es muy similar a la de un cliente normal, se conecta de inmediato con username "Octave". Esta clase puede enviar mensajes broadcast y dirigidos como otro cliente normal. La diferencia ocurre cuando a este le hablan dirigidamente, ya que ClientOctave recibe el mensaje y se lo dirije a OctaveBot, el cual se encarga de hacer las operaciones requeridas.

OctaveBot

Esta clase analiza el mensaje que se le envió a ClientOctave y responde de acuerdo a lo requerido. En este caso están implementadas las siguientes funciones:

Server

La clase Server es el cerebro de nuestro chat, este espera a los clientes que se conectarán a él. Esto lo hace de la siguiente manera:

De esta manera se pueden atender a varios clientes simultaneamente.

Dentro del servidor se maneja el tipo de mensaje, esto es, existen metodos implementados para definir un mensaje como Broadcast o Unicast

ServerGUI

Esta clase es muy similar a Server solo que en esta, todos los parametros se manejan a través de una interfaz gráfica.

Fig2. - Interfaz gráfica Servidor

Como se puede ver en la figura 2 existe un botón para iniciar el servidor y un textbox para seleccionar el puerto que se quiere usar.

3.- PRUEBAS

Nuestro proyecto se puede correr tanto en terminal como con interfaz gráfica.

Para poder hacer funcionar esta apliación se necesita el paquete symbolic de Octave el cual se instala de la siguiente manera:

Se realizaron las siguientes pruebas:

4.- CONCLUSIONES

Lo que se puede concluir al haber realizado este proyecto es lo siguiente:

5.- INSTRUCCIONES Y DESCARGA

Para poder hacer funcionar esta apliación se necesita el paquete symbolic de Octave el cual se instala de la siguiente manera:

Para compilar y ejecutar el código:

Puede descargar el código desde el siguiente enlace.