class PingPongManager: def __init__(self, xbee: XBee): self._xbee = xbee self._protocol = Protocol(xbee) self._protocol.on_packet(PingPongPacket, self.on_message_received) self._time = time.time() async def init(self): logging.info('init') address = await self._xbee.discover_first_remote_device() logging.info('address\t') self._protocol.send_packet( address, PingPongPacket(index=0, payload=generate_payload(0))) def on_message_received(self, remote_address: bytearray, ping_pong: PingPongPacket): t = time.time() delta = t - self._time self._time = t logging.info("Received (%s) \t%s\t%d", delta, remote_address, ping_pong.index) ping_pong.index += 1 ping_pong.payload = generate_payload(ping_pong.index) try: self._protocol.send_packet(remote_address, ping_pong) logging.info("Send\t%s\t%d", remote_address, ping_pong.index) except Exception as e: logging.error("Send error\t%s\t%s", remote_address, e)
async def main(): parser = ArgumentParser() parser.add_argument('--device', required=True) parser.add_argument('--db-uri', required=False) parser.add_argument('--timeout', type=float, default=30) use_stubs = bool(os.environ.get('USE_STUBS', False)) args = parser.parse_args() if not use_stubs: xbee = XBee(args.device) xbee.open() protocol = Protocol(xbee, args.timeout) protocol.on_packet(CurrentLocationPacket, gps_data_received) protocol.on_request(SignDataRequest, sign_data_handler) if args.db_uri: database = Database(args.db_uri) set_interval(sign_data_task, 1, protocol, database) set_interval(send_gps_task, 1, protocol, database) else: if args.db_uri: database = Database(args.db_uri) set_interval(sign_data_task, 1, None, database)