| CAMX: Estudio y desarrollo del controlador de la matriz de vídeo y audio AMX | ||
|---|---|---|
| Anterior | Capítulo 1. Introducción | Siguiente |
El estudio del protocolo se desarrolló mediante un estudio de ingeniería inversa que fue aplicado a la aplicación java-web proporcionada a la facultad para el control de la matriz. En este apartado voy a introducir el funcionamiento básico del protocolo utilizado para la creación de la aplicación, absteniéndome de profundizar en la estructura de los mensajes y centrándome tan sólo en su semántica más general.
Encontraremos los siguientes tipos de mensaje:
Login y rLogin
CommandSend
LevelValueSet
InputChannelOn y OutputChannelOn
InputChannelOff y OutputChannelOff
GetMessages y rGetMessages
Los utilizados exclusivamente por el cliente son:
Login → lanzado por el cliente para iniciar el diálogo con la matriz.
InputChannelOn → el cliente indica el comienzo de un evento. Como por ejemplo apretar el botón que mueve la matriz hacia la derecha.
InputChannelOff → el cliente indica el fin de un evento. Para el ejemplo anterior, sería el momento en el que es soltado el botón.
Los utilizados exclusivamente por la matriz son:
rLogin → respuesta de la matriz al Login del cliente, indicará si se tiene acceso a ella o si por el contrario nos es negado.
CommandSend → la matriz nos manda dos de estos mensajes al haberse realizado el login correctamente, su utilidad sigue siendo aún desconocida a día de hoy.
LevelValueSet → como su nombre indica, es lanzado por la matriz indicando el valor actual de uno de los distintos parámetros de la matriz (velocidad cámara, volumen micro, etc ..).
OutputChannelOn → será lanzado por la matriz cuando un dispositivo haya sido activado o una acción haya sido iniciada.
OutputChannelOff → será lanzado por la matriz cuando un dispositivo haya sido desactivado o una acción haya sido finalizada.
Y los utilizados por ambos:
GetMessages y rGetMessages → realizarán la función "are you alive?" del protocolo, siendo lanzados por matriz o cliente y respondidos por su contrario.
Nuestro cliente lanzará un mensaje tipo Login a la matriz, en ese momento la matriz le responde con un rLogin. En caso de habernos permitido el acceso nos lanzará una serie de mensajes (CommandSend,OutputChannelOn,LevelValueSet) que nos informarán del estado actual de los eventos.
El manejo de los eventos es relativamente sencillo. Todos se identifican por un número entero contenido en la etiqueta <Channel> de los mensajes. Hay dos tipos de eventos:
En los primeros la activación y desactivación se realiza mediante el envío de InputChannelOn seguido de InputChannelOff. Ejemplo de éstos son los eventos que representan la selección de una determinada cámara o de una entrada de la matriz.
Otros por el contrario, se activan al recibir el InputChannelOn y se desactivan al recibir el InputChannelOff, como es el caso de los desplazamientos direccionales de las cámaras.
Mientras nuestro cliente no se disponga a pedir servicio alguno a la matriz, ésta le pedirá una confirmación de su presencia mediante el mensaje tipo GetMessages. Nuestro cliente le responderá con un mensaje del tipo rGetMessages.
Si tras tres peticiones GetMessages de la matriz no se va a pedir ningún servicio a la matriz, el cliente será ahora el que lanza a esta un GetMessages para que sea respondido.
Si mientras recibimos un GetMessages queremos enviar el comienzo/fin de un evento, deberemos contestar primero a la petición de la matriz y luego enviar nuestro evento.