Esempio n. 1
0
                            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 ):