if tm2: records[midx] = sensor_packet.set_packet_timestamp(records[midx],tm2 - offset); client.desynched = True else: if client.desynched: print "Client at %s synchronized"%uid client.desynched = False for m in records: if sensor_packet.read_packet_type(m) == sensor_packet.MT_DEVICE_IDENTIFIER: r = sensor_packet.read_packet(m) uid = r[3] print "%d records from %s"%(len(records),uid) for m in records: if sensor_packet.read_packet_type(m) != sensor_packet.MT_DEVICE_IDENTIFIER: sensor_packet.publish(uid,m) except: import traceback traceback.print_exc(); for client in clients: if client.desynched: send_message(client, sensor_packet.timesync_packet()) client.desynched = False time.sleep(0.01);
return msg.seq_no def unpack_several(data, offset=0, numfields=1, datatype='l', endian='<'): return struct.unpack_from(endian+datatype*numfields,data,offset) try: while True: if server.connected: msgs = server.tick(); for typ,msg,client in msgs: if typ=='xbee_relay_cmd_pb2': cmd_msg = xbee_relay_cmd_pb2.XBee_Relay_Cmd() cmd_msg.ParseFromString(msg); if ( cmd_msg.command == xbee_relay_cmd_pb2.XBee_Relay_Cmd.PUBLISH_DATA ): sensor_packet.publish(cmd_msg.source, cmd_msg.data) elif ( cmd_msg.command == xbee_relay_cmd_pb2.XBee_Relay_Cmd.FORWARD_TO_XBEE ): seq_no = sendToXbee(cmd_msg.to,cmd_msg.data) client_response_map[seq_no] = (client,time.time()) elif ( cmd_msg.command == xbee_relay_cmd_pb2.XBee_Relay_Cmd.BROADCAST_TO_XBEE ): seq_no = broadcast(cmd_msg.data) client_response_map[seq_no] = (client,time.time()) elif ( cmd_msg.command == xbee_relay_cmd_pb2.XBee_Relay_Cmd.REGISTER_AS_RELAY ): print "XBee Relay at ",client.ip," added" relay_clients.append(client) else: print "Unknown command code" elif typ=='xbee_relay_resp_pb2': resp_msg = xbee_relay_resp_pb2.XBee_Relay_Resp() resp_msg.ParseFromString(msg); if ( (resp_msg.seq_no,client) in message_tracking_map ):