Resumen

Una de los enfoques al desarrollar kaster fue hacerlo de forma modular, por lo que se dividió el proyecto en dos niveles, uno que se encarga de las conexiones entre servidor y cliente y otro de interfaz gráfica y visualización de diapositivas, ésta división permitió el uso de QT para el desarrollo de la interfaz, mientras que lo relacionado a la conexión se implementó en C, de fácil integración con QT, que usa el lenguaje C++.

Al desarollar Kaster también se le dió importancia a la eficiencia y confiabilidad del sistema, para obtener esta eficiencia, se hace extensivo uso de programación en hebras, permitiendo un manejo simultáneo de un gran número de clientes por parte del servidor. Mientras que las conexiones son de tipo TCP, asegurando el envío correcto de las imagenes de diapositivas.

La gran compatibilidad con formatos se logra mediante el uso de los programas Imagemagick y LibreOffice, los cuáles son usados en scripts invocados en la interfaz, y transforman las diapositivas a archivos .png para su envío.

Funcionamiento

El funcionamiento de Kaster puede dividirse en 2 niveles en los que participa Cliente y Servidor, uno de conexión en el que se acepta clientes y envía las diapostivas, y otro de interfaz, en que se tiene la interfaz gráfica y control simultáneo de diapositivas.

Conexión

En el servidor, una vez abierto un socket de escucha (puerto predeterminado), se comienza la aceptación de clientes (de manera continua hasta alcanzar un máximo predeterminado), cada vez que se detecta una conexión, se abre una hebra por separado a la hebra main (donde sólo se realiza la aceptación de clientes), en la que se procede a enviarle al cliente, por conexión TCP,la cantidad de diapositivas de la presentación, seguido de cada diapositiva por separado, y de manera ordenada. Cada envío de diapositiva se hace en la funcion sendFile, que consiste en el envío de su tamaño, seguido de una confirmación del cliente de que se abrió un buffer para recibir los datos (espera por ésta confirmación es bloqueante para la hebra), para que luego, una vez se abre el buffer, se procede a enviar la imagen correspondiente.

En el lado del cliente, sólo se tiene la hebra main reicbiendo los datos envíados por el servidor, y creando los archivos en el el directorio temporal. La asignación de espacio para el buffer de la conexión TCP se hace de manera dinámica, recibiendo los el tamaño cada vez que se envía una imagen, y usando el tamaño para abrir un buffer y recibir la imagen en la funcion receiveFile.

Interfaz gráfica

La mayor razón por la cual se opta por QT en el presente proyecto es debido a su facilidad de uso para implementar interfaces gráficas amigables y portables entre distintos sistemas operativos para proyectos no comerciales. Posee un sistema de señales y acciones similar a los listeners de Java, que permite añadir interactividad a las distintas componentes que conforman la interfaz gráfica, y puede combinarse con código en C y C++ no relacionado con QT.

Pantallazos servidor

Pantallazos cliente