Práctica 5: Callbacks RMI. Ejercicio 1. (Será realizado en la Sala de Computo) El siguiente ejercicio describe los pasos a seguir para aplicar el mecanismo Callback con Java RMI. En este ejercicio se requiere implementar una aplicación chat que permita al usuario ver en línea los contactos activos y establecer un dialogo entre todos los usuarios que entran en sesión. El cliente podrá seleccionar la operación mediante una GUI. El procesamiento de estas operaciones es una responsabilidad compartida entre un proceso cliente y un proceso servidor. Antes de iniciar estructurar un directorio de trabajo donde se ubicaran los archivos fuente (directorio 'src') y los archivos binarios (bytecode) (directorio bin) ver Figura 1. Figura 1 Estructura del Directorio de trabajo 1. Diseñar e implementar los componentes de la interfaz Para la implementación de esta aplicación el estudiante debe definir tres paquetes de trabajo: cliente, servidor y sop_rmi. En dichos paquetes debe distribuir de manera adecuada los diferentes archivos que se indica en esta guía. 1.a Definiendo la interface remota del servidor: Editar el archivo ServidorInt.java Definiendo la interface remota del cliente: Editar el archivo ClienteInt.java Pablo Magé 1
La interfaz ServidorInt especifica los métodos que le permiten al cliente registrarse en la aplicación, enviar un mensaje y desconectarse de la aplicación. La interfaz ClienteInt especifica los métodos callback que le permiten al usuario recibir un mensaje, actualizar el listado de contactos y obtener el nombre del contacto. 1.b) Implementando la Interface Servidor Remota: Editar el archivo ServidorImpl.java correspondiente al código del objeto de implementación. La figura 4, 5, 6, 7 y 8 presentan los códigos del constructor(), registrar, enviarmsg(), hacercallbck(), y desconectar(). Figura 4 Constructor Pablo Magé 2
Figura 5 Código del método registrar() Figura 6 Código del método enviarmsg() Figura 7 Código del método hacercallbck Pablo Magé 3
Figura 8 Código del método desconectar() Implementando la Interface Cliente Remota: Editar el archivo ServidorImpl.java correspondiente al código del objeto de implementación. Las figuras 9, 10, 11 y 12 presentan los códigos del constructor(), recibirmsg(), recibircontacto() y obtenernombre(). Figura 9 Constructor() Figura 10 Código del método recibirmsg() Figura 11 Código del método recibircontacto() Figura 12 Código del método obtenernombre() 2. Compilar los códigos fuentes y generar los stubs Pablo Magé 4
2.a) Escribir el código del cliente de objetos: Descargar el archivo GUICliente.java, correspondiente a la lógica de negocio del lado cliente y ubicarlo en el directorio apropiado. 2.b. Generando Stubs - Compilar el código fuente de los objetos de implementación (ServidorImpl.java y ClienteImpl.java) con la herramienta javac (Compilador java). - Generar los respectivos stub :Java RMI provee la utilidad rmic, el cual procesa el código compilado del objeto de implementación y genera el soporte RMI (clase stub versión 1.2, clase stub y skeleton versión 1.1 de Java). Por ejemplo para la versión 1.2 del jdk el comando: % rmic nombre_paquete.servidorimpl El cual genera el sop_rmi para la interfaz del Servidor. Hacer lo mismo para la interfaz del Cliente. 3.Hacer accesibles las clases a través de la red. 3.a. Implementar el servidor: Utilizar el servidor utilizado en la práctica 1 para crear el archivo ServidorChat.java. Usar como nombre del servicio a registrar: Chat. 3.b. Iniciar el registro. Lanzar el N_S del RMI desde el directorio 'bin', en un puerto dado o en el puerto por defecto (1099) % rmiregistry Realizar este paso si se decide lanzar el N_S de forma manual. Compilar el código fuente usando la herramienta javac. 4. Iniciar la aplicación. a. Ejecutar el servidor: % java nom_pk.nom_servidor_objeto dir_servidor puerto Por ejemplo %java servidor.servidorchat localhost 1099. b. Ejecutar el cliente: % java cliente.guicliente Ejercicio 2.(Para ser entregado en la fecha indicada) Condiciones de entrega: El informe debe contener: Archivo guía: Este documento contendrá una guía resumida de los comandos necesarios para ejecutar la aplicación. Códigos fuente: Entrega de los código fuente debidamente documentados usando la sintaxis Javadoc. Fecha de entrega del taller: 13 de Noviembre de 2008. Fecha de recepción de informes: 27 de Noviembre de 2008. No hay fecha de aplazamiento. Por cada día de retraso, con respecto a la fecha de recepción de informes, se rebajará 0.5 sobre nota final. El informe cuyo código fuente no compile tiene un valor de Pablo Magé 5
0. Requerimiento: Implementar el siguiente juego deductivo usando la tecnología Java RMI: El juego consiste en adivinar una clave conformada por cuatro colores, los colores y el orden de dichos colores son escogidos por el administrador de este juego deductivo. El cliente posee una interfaz_gráfica GUI_1 donde se debe desplegar un tablero de juego(ver Figura 1). Por medio de este tablero el usuario podrá jugar y recibir las respuestas enviada por un servidor. El servidor contará con una interfaz_gráfica GUI_2. Esta interface gráfica será utilizada por el administrador del juego para fijar la clave que el usuario deberá adivinar( Ver Figura 1). Figura 1 El usuario tendrá 13 oportunidad para adivinar la clave. En el tablero de juego se tendrán 13 filas, una por cada oportunidad. En cada fila fijará la clave rellenando los 4 orificios con los colores de la clave. En cada intento de adivinanza de la clave se debe rellenar la fila completa. Una vez fijados los colores el servidor responderá rellenando los cuatro orificios ubicados frente a la fila (zona_de_respuesta) con los colores azul o rojo. El color azul indica que tenemos una de nuestras fichas del color adecuado y en la posición adecuada y las fichas rojas nos dicen que hemos acertado el color pero no la posición. Por último, las posiciones vacías, indican que hemos colocado fichas cuyo color ni si quiera aparece en la clave suministrada por el administrador. Figura 2 Basado en la respuesta enviada por el servidor, el usuario deberá intentar asertar la clave, así hasta adivinar la clave correcta. El sistema debe ser capaz de atender hasta 5 usuarios, y cada usarios podrá observar su registro de juego. Pablo Magé 6