La interacción entre los Listeners y la API de administración de Malon se hace de manera desacoplada a través de una interfaz REST
Clases abstractas
El componente principal a la hora de definir las acciones a tomar ante un mensaje de un agente es el Handler:
classHandler(ABC):@abstractmethoddefhandle_msg(self,msg:bytes):""" En cada una de las requests que realiza el agente, se invoca este metodo. Es necesario en este lugar decidir el tipo de mensaje que se esta recibiendo para definir si es necesario consultar por tareas nuevas que deba realizar el agente o registrar el resultado """pass
Debido a que múltiples agentes pueden realizar conexiones en simultaneo con un listener, definimos un método abstracto para poder encapsular la logica que se encarga de discriminarlos.
classAuthenticatedHandler(ABC):@abstractmethoddefhandle_auth_msg(self,msg:bytes,client_id:str):""" Posee la misma logica correspondiente al manejo de mensajes, pero con la funcionalidad adicional de poder identificar al agente que se encuentra interactuando con el listener """pass
Implementación de API Handler
Utilizaremos el siguiente API Handler para interactuar con la API Rest, la cual requiere identificar a que agente pertenece la interacción (client_id)