Administrador de Video (comunicación entre procesos)

Descripción
    Se desea contar con un sistema que permita hacer programaciones a pedido.
    El servidor corre en trasfondo en forma permanente mostrando un video que ha sido programado previamente.
    El cliente se contacta con el servidor via una FIFO ingresada como parámetro. Éste puede solicitar la siguiente información de parte del servidor:
1.- Listado de videos disponible. Se lista:
    Número del video        Nombre del Video        Duración
2.- Listado de videos ya programados. Se lista:
    Número de video        Nombre del Video        Hora de salida al aire

Aquí se debe indicar cual está siendo transmitido actualmente. En este caso la salida indica en el aire hace XXX minutos en la columna Hora de salida al aire.

La hora de salida al aire debe ser en formato similar al entregado por el comando "date".

3.- Programación de un video. Se ingresa el número del video y el horario más tardio que toleramos se programe. El servidor responde si la programación pudo o no ser satisfecha y para cuando se programó.

El servidor obtiene su información del registro de videos (archivo videos.txt) y de las programciones que efectuen los clientes.
Asuma que sólo un cliente se conecta a la vez.
El archivo videos.txt tiene el siguiente formato:
<Número del video>  ^ <nombre del video> ^ <Duración en minutos> <NewLine>

Si por alguna razón un usuario desea programar un video el cual no tiene cabida, pero se le puede hacer espacio reitinerando un video ya programado para un horario posterior y previo al horario más tardio, el servidor le envia un correo al usuario notificando la reprogramción del video. Le envia un mensaje indicando:
"Su video <nombre del video> ha sido reprogramado para las <nueva hora>"



Contenido:
 El presente directorio contiene los siguientes archivos:
servidor.c    Programa que proporciona la informacion y progama los videos.
cliente.c      Programa a través del cual se contacta al cliente.
funciones.c Archivo con las funciones utilizadas por servidor.c
servidor.h    Archivo de cabecera con las definiciones utilizadas por servidor.c y funciones.c
videos.txt    Archivo con la lista de videos disponibles.
makefile      Archivo de compilación

Compilación:
    Para compilar el programa se debe ejecutar en el directorio donde se encuentran los archivos
>make
    Con lo cual se generan dos archivos ejecutables cli y ser . Para eliminar los archivos .o creados en la compilacion basta ejecutar
>make clean
    Si se desea eliminar ademas los archivos ejecutables se debe ejecutar
>make all
    Los argumentos de ambos programas cli y ser son dos y son los nombres de las fifos a utilizar.

Sobre la ejecución:
Se debe ejecutar primer ser (servidor), si el path no esta bien configurado se debera anteponer ./ a los comandos antes mencionados, por ejemplo para ejecutar ser se debera tipear
>./ser <nombre-fifo1> <nombre-fifo2>
>./cli <nombre-fifo1> <nombre-fifo2>
 
 

Funcionamiento:
    Cliente contacta al Servidor a través de dos fifos que este último creo. Luego genera un hijo, el cual se hace cargo de escribir en pantalla todo lo que el servidor escribe en la fifo denominada "pantalla". Por otra parte el padre escribe las entradas de teclado en la fifo para que sean leídas por el servidor.
    Servidor por otra parte crea las fifos antes mencionadas, carga el contenido del archivo con los videos (videos.txt) a memoria y procesa las peticiones solicitadas, enviado las respuestas a través de la fifo pantalla como se mencionó anteriormente.
    La política de asignación de horarios es que el usiario nos informa la hora tope en la cual el desea que el video este en su casa, si este no se puede terminar de transmitir en el plazo asignado por el usuario se informa al este que el video no se puede programar en ese horario. Si se necesita reprogramar un video estos se realiza consultando desde el ultimo al primero de la lista de videos ya programados, los cuales estan ordenados por horario de transmición. La lista que contiene los videos es una estructura de datos al estilo de una "lista simplemente enlazada".
    Si un video es reprogramado, tal como se solicitó, se envia un mail al usuario correspondiente informandole que su video ha sido reprogramado, es posible que un video sea reprogramado en reiteradas ocaciones, con lo cual, el usuario deberá tomar como ofiacial la informción del mail que halla sido enviado más tarde por Servidor. Cuando se solicita la dirección de correo solo se debe ingresar el usename y no el dominio ya que se asume que los usuarios son pertenecientes a la red local (dominio elo.utfsm.cl)
    La interfaz ha sido desarrollada para un usuario "amable" el cual no ingresara datos erroneos como fechas inexistentes, intentos de programar un video en una fecha pasada, etc. Ya que no es el objetivo del tema.

Mejoras:
     Una mejora que se podría sucitar, si se prefiere es al reprogramar un video puede generarse un hueco de tiempo el cual puede ser llenado reconfigurando toda la lista, el problema que esto acarrea es  el enviar mail a una gran cantidad de usuarios, esto se realizaría si se desea aprovechar mejor el recurso "transmisión".
    Diversas mejoras podemos encontrar en la política de programación de los videos , como son por ejemplo, la reprogramación de dos videos para generar un hueco suficionete para un video nuevo, esto claro esta no es el objetivo de la tarea, pero abre un horizonte para futuros problemas.



Alvaro Patricio Arenas Ramos       9721033-0
mailto:aarenas@alumnos.utfsm.cl