import logging from tornado.web import Application from tfw.internals.networking import EventHandlerConnector from tfw.internals.server import ZMQWebSocketRouter from tfw.config import TFWENV LOG = logging.getLogger(__name__) class TFWServer: """ This class handles the proxying of messages between the frontend and event handers. It proxies messages from the "/ws" route to all event handlers subscribed to a ZMQ SUB socket. """ def __init__(self): self._event_handler_connector = EventHandlerConnector( downlink_bind_addr=f'tcp://*:{TFWENV.PULL_PORT}', uplink_bind_addr=f'tcp://*:{TFWENV.PUB_PORT}' ) self.application = Application([( r'/ws', ZMQWebSocketRouter, { 'event_handler_connector': self._event_handler_connector, } )]) def listen(self): self.application.listen(TFWENV.WEB_PORT)