A.7. Red

7.1. Vamos a acceder desde el móvil a nuestra tienda virtual. Mostraremos en el móvil una pantalla en la que aparecerá la lista de productos que hay disponibles en nuestra tienda. Al pulsar sobre cada uno de ellos nos mostrará información detallada sobre el producto.

Tenemos la aplicación base implementada en el directorio Tienda. Deberemos añadir en el método leeProductos de la clase ListaProductos el código necesario para leer la lista de productos de la red.

Para ello conectaremos a la URL donde tenemos el servlet de nuestra tienda y leeremos la información de los productos que nos envía en la respuesta. La información que se envía consiste en una serie de objetos Producto serializados. Para leerlos podremos deserializar objetos Producto del flujo de entrada hasta que se produzca una EOFException, indicándonos que se ha llegado al final del flujo.

7.2. En este ejercicio implementaremos una aplicación de chat para el móvil. Podemos encontrar el código base de la aplicación en el directorio Chat, sobre el que deberemos hacer lo siguiente:

a) Lo primero que se mostrará será una pantalla de login, donde el usuario deberá introducir el login con el que participar en el chat. Deberemos enviar este login al servidor para iniciar la sesión. Para ello abriremos una conexión con la URL del servlet proporcionando los siguientes parámetros:

?accion=login&id=<nick_del_usuario>

Si el login es correcto, el servidor nos devolverá un código de respuesta 200 OK. Además deberemos leer la cabecera URL-Reescrita, donde nos habrá enviado la URL rescrita que deberemos utilizar de ahora en adelante para mantener la sesión.

Esto deberemos hacerlo en el método login de la clase PantallaLogin. Este método deberá devolver la URL rescrita.

b) Una vez hemos entrado en el chat, utilizaremos la técnica de polling para obtener los mensajes escritos en el chat y mostrarlos en la pantalla. Utilizando la URL rescrita, conectaremos al servlet del chat proporcionando el siguiente parámetro:

?accion=lista

Esto nos devolverá como respuesta una serie de mensajes, codificados mediante un objeto DataOutputStream de la siguiente forma:

<nick1> <mensaje1>
<nick2> <mensaje2>
...
<nickN> <mensajeN>

De esta forma podremos utilizar un objeto DataInputStream para ir leyendo con el método readUTF las cadenas del nick y del texto de cada mensaje del chat:

String nick = dis.readUTF();
String texto = dis.readUTF();

Esto lo haremos dentro del método actualizaLista de la clase ListaMensajes. Añadiremos cada mensaje leído como un StringItem al formulario:

this.append(new StringItem("<" + nick + ">", texto));	 

Esto hará que el número de elementos del formulario vaya creciendo conforme llegan mensajes del chat. Para evitar que llegue a crecer demasiado, cosa que lo haría incómodo para la interfaz de los móviles, podemos eliminar los mensajes más antiguos cuando se rebase una cierta capacidad máxima:

if(this.size() >= CAPACIDAD) {
    this.delete(0);
}

c) Lo último que deberemos hacer es permitir enviar mensajes al chat. Para ello enviaremos los mensajes en el POST, a la URL rescrita proporcionando el siguiente parámetro:

?accion=enviar

Esto lo haremos en el método envia de la clase EnviarMensaje. El mensaje se deberá codificar en binario, escribiendo la cadena del mensaje con el método writeUTF de un objeto DataOutputStream. Si obtenemos una respuesta 200 OK el mensaje habrá sido enviado correctamente.