feat: add agent that is able to receive messages from UI
Inside the `/message` enpoint we put a message onto the internal event queue, which gets read by TestAgent. This agent, in turn, logs the message (temporary behaviour until we implement RI integration). The name TestAgent is of course temporary, this is just for exploratory purposes. ref: N25B-165
This commit is contained in:
@@ -1,4 +1,37 @@
|
||||
import json
|
||||
import logging
|
||||
from spade.agent import Agent
|
||||
from spade.behaviour import CyclicBehaviour
|
||||
import zmq
|
||||
|
||||
from control_backend.core.config import settings
|
||||
from control_backend.core.zmq_context import context
|
||||
from control_backend.schemas.message import Message
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class TestAgent(Agent):
|
||||
pass
|
||||
socket: zmq.Socket
|
||||
|
||||
class ListenBehaviour(CyclicBehaviour):
|
||||
async def run(self):
|
||||
assert self.agent is not None
|
||||
topic, body = await self.agent.socket.recv_multipart()
|
||||
|
||||
try:
|
||||
message_json = json.loads(body.decode("utf-8"))
|
||||
message = Message.model_validate(message_json)
|
||||
logger.info("Received message \"%s\"", message.message)
|
||||
except Exception as e:
|
||||
logger.error("Error processing message: %s", e)
|
||||
|
||||
async def setup(self):
|
||||
logger.info("Setting up %s", self.jid)
|
||||
self.socket = context.socket(zmq.SUB)
|
||||
self.socket.connect(settings.zmq_settings.internal_comm_address)
|
||||
self.socket.setsockopt(zmq.SUBSCRIBE, b"message")
|
||||
|
||||
b = self.ListenBehaviour()
|
||||
self.add_behaviour(b)
|
||||
|
||||
logger.info("Finished setting up %s", self.jid)
|
||||
|
||||
Reference in New Issue
Block a user