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()
示例#2
0
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()
示例#3
0
    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()