Comandos
    vcCS            Servidor del Video Club
    vcUser:        Cliente del Video Club
    vcAdmin      Administrador del video Club
    vcVRS        Servidor de recepción de video

Sintaxis
   vcCS   <puerto usuario> <puerto conexion con servidor de recepción> <puerto multicast><grupo multicast>
   vcUser   <nombre de máquina del servidor><puerto de usuario>
   vcAdmin <nombre de máquina del servidor><puerto de usuario>
    vcVRS   <puerto de conexión con el transmisor de videos>
    Archivos Relacionados: videos.txt, listavideos.h

Este sistema permite realizar programaciones a pedido, y enviar videos a destino. El servidor maneja una lista de videos con sus duraciones contenida en el archivo videos.txt. El formato de este archivo es
<nªvideo> ^<nombre>^<minutos>^<ruta de acceso>
El cliente tiene 4 opciones:
-  Listar los videos disponibles(videos.txt) : Se lista:
    Número del video        Nombre del Video        Duración

-  Ver los videos ya programados. Se lista:
    Número de video        Nombre del Video        Hora de salida al aire
   Además se indica 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.

-  Programar un video: en este caso, el cliente debe ingresar además el número de video que desea ver,  la hora máxima en que  puede  ser programado, correo electrónico del usuario y máquina de destino del video

-  Salir

Por otra parte, en la máquina de destino debe estar corriendo el programa vcVRS, que se encarga de almacenar el video enviado por el servidor
Finalmente, a través del programa vcAdmin se puede ingresar remotamente al servidor para cambiar la lista de videos disponibles, agregando o quitando videos de videos.txt.

programa vcCS

El servidor cumple con las siguientes funciones:


Para realizar esto  el servidor cuenta con varias funciones :

                                1.- número del video pedido
                                2.- hora de inicio de la Tx
                                3.- Hora término de la Tx
                                4.- Hora máxima en la que se puede transmitir

                 Las horas se almacenan en segundos a partir de las 0:00 del 1/1/1970.
 

 Además, programa    modifica también  arreglos  de estructuras de tipo lista_ nombres definido también en listavideo.h. Esta estructura tiene dos campos: el arreglo de strings  name y el entero num. usuarios y máquinas de prog son arreglos de estructuras de estos tipos. Por cada video programado, se asigna un elemento de usuarios y maquinas. Esto  permite que por cada video a transmitir se pueda tener una conjunto de usuarios y máquinas de destino, lo cual es necesario si se quiere realizar una transmisión multicast. num indica la cantidad de usuarios de destino que existen por cada video. Por defecto, programa ordena las peticiones en forma FCFS, programando cada petición lo más pronto posible La función programa trabaja entonces de la siguiente forma:
- Si no hay videos programados programa la petición 60 segundos más tarde, a partir del horario actual.
- Si existen videos programados, se revisa si existe alguno de los ya programados que coincida con el que se quiere programar, y que su hora de programación no exceda  la hora máxima permitida para el video en programación. De esta forma, varios usuarios reciben un mismo video por un sólo canal multicast.
- Si el video deseado no está programado, se revisa si es posible programar el nuevo video al final de la lista de los otros
- Si ninguna de las acciones anteriores es posible, entonces no es posible programar el video.
Al cliente se le envía la hora en que se programó su video o 0 en caso de que no se haya podido programar. El recptor interpreta el 0 como que no se pudo programar el video.

 
 
 

programa vcUser

El programa del usuario básicamente recoge las opciones del usuario, las envía al servidor, y despliega en pantalla los datos enviados por este
En base a los argumentos ingresados al ejecutar el programa, este construye el socket usado para comunicarse con el servidor, y luego trata de conectarse a este.
El programa comienza desplegando un menú, y pidiendo una opción al usuario.
Cuando el usuario ingresa una opción, se envía primero un caracter "0" indicando al servidor que se trata de una conexion de usuario.
Luego la opción ingresada es enviada al servidor.
Para las dos primeras opciones , el cliente luego espera los datos enviados por el servidor y los despliega en pantalla. En el primer caso, recibe una estructura del tipo videos con los videos disponibles. A partir de esta estructura el programa sintetiza la información que despliega en pantalla. En el segundo caso,  se muestra la programación directamente desde el buffer recibido.
Para la opción 3, el cliente pide al usuario que ingrese el numero de video, la fecha máxima en que se puede programar la petición (en formato Nºvideo/mes/dia/hora/minutos/correoelectrónico). Por ejemplo para ingresar el video 1 para el 5 de octubre a las 10:00 am se debe ingresar:
1/10/5/10/00/zero@elo.utfsm.cl
Luego, se solicita la máquina a la que se debe enviar el video programado
 
 

programa vcAdmin

Este programa permite que un administrador se conecte en forma remota y efectue cambios en los videos disponibles.
En base a los argumentos ingresados al ejecutar el programa, este construye el socket usado para comunicarse con el servidor, y luego trata de conectarse a este.
El administador tiene tres opciones. Al ingresar la opción, se envía primero el caracter "1", el cual indica a vcCS que se trata de una conexión de administración. Luego se envía la opción al servidor y este retorna una estructura del tipo videos que contiene la información actual del archivo video.txt.
Si se ingresa la opción 1, se despliegan los datos en pantalla como en el programa anterior. Si se ingresa la opción 2,  se pregunta los datos del nuevo video a ingresar y se modifica la estructura videos.
Si se ingresa la opción 3, se pregunta que video se desea eliminar y se modifica la estructura videos. en estos dos casos, se envía de vuelta la estructura videos al servidor, lo que permite a este modificar el archivo videos.txt.
 
 

programa vcVRS


Este programa recibe el video desde el servidor. Crea primero un socket y espera conexion desde el servidor. Al producirse la conexión,  recibe los datos del canal multicast al que debe conectarse para recibir el video, así como el nombre del video. Se une al canal multicast , se abre el archivo y se espera por la llegada de paqutes desde el canal multicast. o por una señal de termino desde la conexión TCP. Para esto, ambos sockets  (TCP y Multicast) son monitoreados por la función select. La llegada de cualquier dato por la conexión TCP indica el fin de la transmisión. En este caso, se cierran los sockets y se termina la ejecución del programa.
Nota: Los videos son almacenados en el directorio temporal de la máquina de destino. Esto se debe a que si el archivo se guarda en el directorio donde se ejecuta el programa, y si ese directorio corresponde a una cuenta montada desde una máquina externa, entonces la escritura del archivo interfiere con la recepción, lo que provoca la pérdida de paquetes.

A continuación se muestra un diagrama de los programas y su interacción