*************************** README ***************************
**                                                          **
**    Programación de Sistemas - ELO330                     **
**    Tarea N°3                                             **
**    Creado por: Andrés Llico G.                           **
**                                                          **
**    Fecha: 21/03/2012                                     **
**                                                          **
**************************************************************

1. Contenido
**************************************************************

- README.txt
     Este archivo.

- Documentacion.pdf
     Archivo de documentación.

- acumulador.c
     Servidor TCP que almacena las opciones enviadas por
     los Clientes (televisores) y se las despliega a los
     Monitores.

- televisor.c
     Cliente TCP que envia un entero correspondiente a una
     opcion entre 0 y 5 inclusive, al acumulador.
     
- monitor.c
     Cliente TCP que consulta por las estadisticas acumuladas
     en el Servidor acumulador y las despliega por la salida
     estandar.

- testEsfuerzo.c
     Genera Clientes televisor que enviaran datos al Servidor
     para probar esfuerzo.

- makefile
     Archivo que permite compilar el programa entregado.

2. Descripcion
**************************************************************

Este programa apunta a recrear una aplicacion interactiva de
television digital, en que el programa pide a los televidentes
elegir una opcion, entre 0 y 5 (inclusive) y enviarla a un
servidor que acumulara los datos con las preferencias.

Ademas, existira un monitor que realiza consultas al servidor
para que este le envie las estadisticas con las preferencias
acumuladas hasta ese momento.

Finalmente, se cuenta con un test de Esfuerzo para probar el 
funcionamiento del servidor en situaciones de gran cantidad de
respuestas simultaneas por parte de los televidentes.

3. Compilacion
**************************************************************

El makefile entregado junto a este archivo contiene
los comandos necesarios para realizar la compilacion.

Comandos:
    make               compila todos los programas
    make acumulador    compila el programa acumulador.c
    make televisor     compila el programa televisor.c
    make monitor       compila el programa monitor.c
    make testEsfuerzo  compila el programa testEsfuerzo.c
    make clean         borra los archivos *.o generados
                       en la compilacion

4. Modo de uso
**************************************************************

Se cuenta con cuatro programas distintos, y sintaxis es:

acumulador <puerto_votacion> <puerto_monitor>

    <puerto_votacion>  Puerto en que se recibe conexiones
                       de televisores
    <puerto_monitor>   Puerto en que se recibe conexiones
                       de monitores

televisor <servidor_acumulador> <puerto_votacion> <opcion_seleccionada>

    <servidor_acumulador>  Direccion IP del servidor acumulador
    <puerto_votacion>      Puerto en que se recibe conexiones
                           de televisores
    <opcion_seleccionada>  Opcion seleccionada por el televidente
                           (entre 0 y 5 inclusive)

monitor <servidor_acumulador> <puerto_monitor>

    <servidor_acumulador>  Direccion IP del servidor acumulador
    <puerto_monitor>       Puerto en que se recibe conexiones
                           de monitores

testEsfuerzo <servidor_acumulador> <puerto_votacion> <numero_clientes_simulados>

    <servidor_acumulador>         Direccion IP del servidor acumulador
    <puerto_votacion>             Puerto en que se recibe conexiones
                                  de televisores
    <numero_clientes_simulados>   Numero de televisores generados
                                  para la simulacion

5. Restricciones
**************************************************************

a. El programa testEsfuerzo utiliza fork() para la creacion
   de las hebras donde se ejecutara cada televisor. El numero
   de clientes simulados estara limitado a las hebras/fork
   que el SO permita crear en paralelo.
