toro.alonso-stromsvaag.henriette-vargas.paulo-Tarea1.2025.1
- Alonso Toro
- Paulo Vargas
- Henriette Stromsvaag
Para el desarrollo de la tarea se trabajó por ramas. Se tendrá que:
- RAMA MAIN — STAGE 4 (ETAPA FINAL DE LO OBLIGATORIO): https://github.com/alonsoo7/tarea1_elo329/tree/main
- RAMA STAGE1 — STAGE1: https://github.com/alonsoo7/tarea1_elo329/tree/stage1
- RAMA STAGE2 — STAGE2: https://github.com/alonsoo7/tarea1_elo329/tree/stage2
- RAMA STAGE3 — STAGE3: https://github.com/alonsoo7/tarea1_elo329/tree/stage3
- RAMA STAGE4 (se hizo merge a main): https://github.com/alonsoo7/tarea1_elo329/tree/stage4
- RAMA EXTRA! se realizó las necesidades para el puntaje extra https://github.com/alonsoo7/tarea1_elo329/tree/StageExtra
Se implementaron las siguientes clases y métodos:
- subscribe, notify y el constructor en
Topic. - Constructor en
Subscribery enComponent. - update y constructor en
Follower. - Constructor y publishNewEvent en
Publisher.
Existen dos formas de ejecutar esta etapa:
-
Uso del Makefile:
- Primero, ejecuta el siguiente comando para compilar el proyecto:
make
- Luego, ejecuta el programa con:
make run
- El programa recibirá entrada por consola directamente. Solo debes ingresar el mensaje y notarás que se crea un archivo
seguidor.txt, que se irá actualizando conforme se vayan enviando mensajes. (se puede visualizar utilizando tail seguidor.txt -f)
- Primero, ejecuta el siguiente comando para compilar el proyecto:
-
Ejecución directa desde consola:
- Primero, compila el código con:
javac *.java - Luego, ejecuta el programa con:
java T1Stage1
- El funcionamiento será el mismo que con el Makefile.
- Primero, compila el código con:
Para limpiar los archivos generados, puedes ejecutar:
make cleanEn esta etapa se continuó con la implementación del sistema, centrándose en la clase Recorder para implementar el tipo de Suscriptor: Registrador. Para esto, se utilizó la estructura de la clase Follower, pero con la modificación de que la salida ahora se graba en formato CSV.
- Constructor en
Recorder. - Método para grabar las posiciones en formato CSV.
- Método
subscribepara que elRecorderpueda recibir notificaciones.
Además, se adaptaron las clases Publisher y Subscriber para trabajar con la nueva funcionalidad de almacenamiento en CSV.
Para esta etapa, ahora se contempla un archivo de configuración. Por defecto, el archivo de configuración para esta etapa es config.txt. y tiene la estructura:
publicador GPS Posiciones suscriptor Registrador MiRegistrador Posiciones trayectoria.txt
Es decir, se menciona un componente de tipo publicador con nombre GPS que publica en el topico Posiciones. Ademas, se menciona un componente de tipo suscriptor de tipo Registrador con nombre MiRegistrador que se suscribe al topico Posiciones y cuyo archivo de salida es trayectoria.txt
Se ha creado un nuevo Makefile para este stage, lo que permite ejecutar el programa con una configuracion predeterminada donde el archivo de configuración se llama config.txt. Para ejecutar el programa, sigue los siguientes pasos:
- Compilación:
- Ejecuta el siguiente comando para compilar el proyecto:
make
- Ejecuta el siguiente comando para compilar el proyecto:
Ejecución:
- Ejecuta el programa con:
make run
- El programa tomará el archivo
config.txtpor defecto y procesará las entradas correctamente.
- Ejecución directa desde consola:
- Primero, compila el código con:
javac *.java - Luego, ejecuta el programa con:
java T1Stage2 config.txt
- El funcionamiento será el mismo que con el Makefile.
- Primero, compila el código con:
- A medida que un publicador, en este caso GPS publique las posiciones mediante entrada de consola, el Registrador almacenará esas posiciones en un formato CSV (Nombre,Topico,CoordenadaX,CoordenadaY), en este caso, en el archivo trayectoria.txt
Para limpiar los archivos generados por la ejecución del programa, ejecuta:
make cleanEn esta etapa se continuó con la desarrollo, generalizando el simulador para configurar un Publicador y dos seguidores utilizando un archivo de configuración.
Se implementaron los siguientes cambios clave en esta etapa:
-
Generalización del Simulador:
- Se configuró el simulador para que pueda manejar un Publicador y dos seguidores a partir de un archivo de configuración.
-
Lectura del Archivo de Configuración:
- Se implementó una doble lectura del archivo para evitar errores por orden en el archivo de configuración:
- Primera lectura: Identifica al Publicador y crea su instancia junto con el tópico en el Broker. Esto garantiza que el tópico esté disponible antes de que los suscriptores intenten suscribirse, asi evitamos problemas.
- Segunda lectura: Configura a los dos suscriptores, validando que el tópico coincida y que haya exactamente dos suscriptores. Esto previene problemas de ejecución causados por un orden incorrecto en la configuración.
- Se implementó una doble lectura del archivo para evitar errores por orden en el archivo de configuración:
-
Entrada por consola:
- En esta stage los mensajes son ingresados por consola. Se debe seguir el formato: (streamer) (mensaje). donde solo los mensajes del streamer (publicador) que se especificó serán enviados, si el nombre del streamer no coincide con el nombre registrado del publicador en el archivo de configuración, se arrojará el mensaje de error:
Unknown Publisher
- En esta stage los mensajes son ingresados por consola. Se debe seguir el formato: (streamer) (mensaje). donde solo los mensajes del streamer (publicador) que se especificó serán enviados, si el nombre del streamer no coincide con el nombre registrado del publicador en el archivo de configuración, se arrojará el mensaje de error:
Al igual que en etapas anteriores, el archivo de configuración se utilizará para definir tanto al publicador como a los dos seguidores. Para esta entrega, el archivo de configuración debe tener el nombre de config3.txt si se quiere ejecutar por el makefile.
-
Compilación:
- Ejecuta el siguiente comando para compilar el proyecto:
make
- Ejecuta el siguiente comando para compilar el proyecto:
-
Ejecución:
-
Ejecuta el programa con:
make run
-
Se cargará el archivo de configuración y se configurará el Publicador y los dos seguidores que se piden en el enunciado. Luego, podrás ingresar los mensajes mediante consola en el siguiente formato:
(streamer) (mensaje)donde (streamer) es el nombre del publicador registrado.
-
Si el nombre del streamer coincide con el publicador registrado, se enviará el mensaje. Si no, se mostrará el mensaje de error:
Unknown Publisher
-
Al igual que las stages antiguas, se puede tambien ejecutar manualmente haciendo:
javac *.class
java T1Stage3.java (archivo de config, en este caso config3.txt)
Y el funcionamiento es el mismo.
Para limpiar los archivos generados por la ejecución del programa, ejecuta:
make cleanFinalmente, tenemos el simulador:
Este repositorio contiene el simulador desarrollado. El objetivo principal de esta etapa fue mejorar el sistema para permitir la configuración multiples publicadores y suscriptores utilizando archivos de configuración. Se realizó la creación de la clase Monitor y mejoras en la gestión de tópicos, suscripciones y mensajes.
La estructura final del proyecto está compuesta por los siguientes archivos en esta etapa:
Component.javaPublisher.javaTopic.javaSubscriber.javaFollower.javaRecorder.javaMonitor.javaBroker.javaSimulador.java(Clase principal para ejecutar el simulador)
El simulador tiene como objetivo permitir la configuración de publicadores y suscriptores (de diferentes tipos), donde los publicadores envían mensajes a sus tópicos correspondientes y los suscriptores a esos tópicos los reciben y almacen en archivos de configuración según que tipo de suscriptor sean. Solo hay un tipo de publicador.
- Monitor: Es un tipo de suscriptor que solo registra las posiciones cuando la distancia al origen (0,0) es mayor o igual a 500, considerando las coordenadas X e Y dentro del rango de [0, 500], en formato CSV.
- Seguidor: Es un tipo de suscriptor que registra mensajes (de texto) que envian los publicadores a los tópicos donde está suscrito.
- Registrador: Es un tipo de suscriptor que registra posiciones (en coordenada X, Y) en un formato CSV.
- Los publicadores solo pueden publicar en un único tópico, pero varios publicadores pueden compartir un mismo tópico.
- Los suscriptores pueden suscribirse a uno o más tópicos.
- El archivo de configuración contiene líneas con el formato:
publicador <nombre> <tópico> suscriptor <tipo> <nombre> <tópico> <archivo>- El tipo de suscriptor puede ser Monitor, Seguidor o Registrador. El sistema permite que múltiples suscriptores se suscriban a un único tópico y que un publicador publique en un solo tópico.
Para la ejecución final del Simulador, se creó un makefile, donde se ejecuta el simulador con un archivo de configuración que por defecto debe llamarse config4.txt. Para esto, se debe ejecutar:
-
Compilación:
- Ejecuta el siguiente comando para compilar el proyecto:
make
- Ejecuta el siguiente comando para compilar el proyecto:
-
Ejecución:
-
Ejecuta el programa con:
make run
-
El simulador recibe mensajes mediante consola con el formato:
<nombre_publicador> <mensaje o coordenadas> -
Los suscriptores de tipo Registrador o Monitor reciben las coordenadas en formato CSV, mientras que los seguidores reciben texto. Los mensajes se almacenan en archivos de salida según el tipo de suscriptor.
-
Otra forma de ejecutarlo para elegir un nombre de archivo de configuración arbitrario es mediante consola. Se puede ejecutar:
javac *.java
java Simulador <nombre del archivo de config, en este caso config4.txt>
La ejecución es igual a la forma con makefile.
Desarrollo Stage Extra
Para la etapa extra, se añadió un nuevo tipo de suscriptor llamado Contador. Este suscriptor cuenta la cantidad total de mensajes recibidos y la cantidad de tiempo que ha estado ejecutándose el simulador. Los datos se almacenan en un archivo CSV con el formato:
<cantidad_mensajes>,<tiempo de ejecución>
El Contador hereda de Subscriber y añade un contador de mensajes y un temporizador que se activa al iniciar la simulación.
Este desarrollo fue hecho en otra rama del repositorio:
https://github.com/alonsoo7/tarea1_elo329/tree/StageExtra
Para ejecutarlo también se dispone de un Makefile asociado. El archivo de configuración predeterminado se llama configEXTRA.txt, de modo que se pueda hacer la ejecución igual que en las etapas anteriores:
make (para compilar)
make run (para ejecutar)
De todas formas, si se quiere ejecutar manualmente, se puede hacer:
javac *.java java Simulador <nombre del archivo de configuración, en este caso configEXTRA.txt>
La única diferencia de funcionamiento es que ahora hay un nuevo tipo de suscriptor disponible para colocar en el archivo de configuración llamado Contador. Por ejemplo, se puede escribir:
suscriptor Contador Contador_1 Notificaciones_1 contador1.csv
Este suscriptor almacenará:
La cantidad de mensajes que ha recibido en total, sumando todos los tópicos a los que está suscrito.
El tiempo de ejecución desde que se inició el programa.
En formato CSV:
<cantidad_mensajes>,<tiempo de ejecución>
En la documentación se hizo un gráfico con estos datos.