def run_visualization_server(mac, broadcast_address, configuration): app = web.Application() app.router.add_route('GET', '/', get_last_state) loop = asyncio.get_event_loop() handler = app.make_handler() f = loop.create_server(handler, '0.0.0.0', 8888) srv = loop.run_until_complete(f) print('serving on', srv.sockets[0].getsockname()) global logger logger = logging.getLogger('Node') cfg_node = configuration['node'] io_executor = AsyncExecutor(5, loop) global udp_messenger debug_cfg = cfg_node['debug'] if not debug_cfg['enabled']: logger.error('Check config! Debug disabled!') return logger.info("Debug port: {}".format(debug_cfg['broadcasting_port'])) udp_messenger = UDPMessenger(broadcast_address, debug_cfg['broadcasting_port'], io_executor, True, loop) udp_messenger.start() asyncio. async (update_nodes()) try: loop.run_forever() except KeyboardInterrupt: pass finally: loop.run_until_complete(handler.finish_connections(1.0)) srv.close() udp_messenger.stop() loop.run_until_complete(srv.wait_closed()) loop.run_until_complete(app.finish()) loop.close()
def run_node(mac, broadcast_address, cfg): logger = logging.getLogger('Node') consts = Const() cfg_node = cfg['node'] hostname = cfg_node['hostname'] or mac messenger = Messenger(mac, broadcast_address, cfg_node['broadcasting_port'], cfg_node['tcp_port'], node_id=hostname) messenger.start() debug_cfg = cfg_node['debug'] if debug_cfg['enabled']: debug_messenger = UDPMessenger(broadcast_address, debug_cfg['broadcasting_port'], AsyncExecutor(2), False) else: debug_messenger = None context = Context(None, consts, messenger, debug_messenger) logger.debug('Running...') context.state = LooserState() try: asyncio.get_event_loop().set_debug(True) while True: asyncio.get_event_loop().run_until_complete( context.state.execute(context)) except KeyboardInterrupt: logger.info('Stopped by user.') messenger.stop() debug_messenger.stop()
def __init__(self, mac, broadcast_address, broadcast_port, tcp_port, node_id=None, loop=None): self._mac = mac self._node_id = node_id self._nodes = {} self._lost_nodes = set() self._loop = loop or asyncio.get_event_loop() self._io_executor = AsyncExecutor(5, self._loop) self._logger = logging.getLogger('Messenger') self._logger.info('Creating messengers...') if tcp_port != 0: self._tcp_messenger = TCPMessenger(tcp_port, self._io_executor, loop=self._loop) if broadcast_port != 0: self._udp_messenger = UDPMessenger(broadcast_address, broadcast_port, self._io_executor, True, self._loop) self._listeners = { 'tcp': self._tcp_messenger, 'udp': self._udp_messenger, } for messenger in self._listeners.values(): messenger.set_on_message(self._on_message) self._daemon = None self._message_queue = asyncio.Queue()