import logging from tornado.web import Application from tfw.internals.networking import ZMQListener 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): downlink_bind_addr = f'tcp://*:{TFWENV.PULL_PORT}' uplink_bind_addr = f'tcp://*:{TFWENV.PUB_PORT}' self._listener = ZMQListener( downlink_bind_addr=downlink_bind_addr, uplink_bind_addr=uplink_bind_addr ) LOG.debug('Pull socket bound to %s', downlink_bind_addr) LOG.debug('Pub socket bound to %s', uplink_bind_addr) self.application = Application([( r'/ws', ZMQWebSocketRouter, { 'listener': self._listener, } )], websocket_ping_interval=30) def listen(self): self.application.listen(TFWENV.WEB_PORT)