|
import socket
|
|
import cStringIO
|
|
import time
|
|
|
|
TCP_IP = '192.168.2.12'
|
|
TCP_PORT = 22222
|
|
BUFFER_SIZE = 4096
|
|
|
|
|
|
def read_until_space(data):
|
|
buf = []
|
|
ch = data.read(1)
|
|
while ch not in [" ", "\n", ""]:
|
|
buf.append(ch)
|
|
ch = data.read(1)
|
|
return "".join(buf)
|
|
|
|
|
|
def read_list(data, cls=float):
|
|
list_data = []
|
|
list_size = int(read_until_space(data))
|
|
# skip the first value since it's not a valid value...not sure what it's for!
|
|
read_until_space(data) # 0
|
|
for x in xrange(list_size):
|
|
list_data.append(cls(read_until_space(data)))
|
|
return list_data
|
|
|
|
|
|
def main():
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.connect((TCP_IP, TCP_PORT))
|
|
s.sendall("Read")
|
|
data = cStringIO.StringIO()
|
|
chunk = s.recv(BUFFER_SIZE)
|
|
while chunk:
|
|
data.write(chunk)
|
|
chunk = s.recv(BUFFER_SIZE)
|
|
# print "read %d bytes\n\n" % len(data.getvalue())
|
|
s.close()
|
|
|
|
# attempt to deserialize
|
|
start = time.clock()
|
|
data.reset()
|
|
header = data.read(int(read_until_space(data)) + 1)
|
|
if header.strip() != "serialization::archive":
|
|
print "not Boost archive serialized: %s" % header
|
|
return
|
|
|
|
# skip the next 3 ints...not sure what they are anyway
|
|
read_until_space(data) # 9
|
|
read_until_space(data) # 0
|
|
read_until_space(data) # 0
|
|
|
|
version = int(read_until_space(data))
|
|
timestamp = float(read_until_space(data))
|
|
ping_period_seconds = float(read_until_space(data))
|
|
gain = int(read_until_space(data))
|
|
pulse_length_seconds = float(read_until_space(data))
|
|
sound_velocity = float(read_until_space(data))
|
|
num_samples = int(read_until_space(data))
|
|
num_channels = int(read_until_space(data))
|
|
|
|
# now read the lists...
|
|
angles = read_list(data)
|
|
ranges = read_list(data)
|
|
magnitude = read_list(data)
|
|
raw_data = read_list(data, int)
|
|
end = time.clock()
|
|
|
|
data.close()
|
|
|
|
print " version: %d" % version
|
|
print " timestamp: %f" % timestamp
|
|
print " ping period (s): %f" % ping_period_seconds
|
|
print " gain: %d" % gain
|
|
print " pulse length (s): %f" % pulse_length_seconds
|
|
print "sound velocity (m/s): %f" % sound_velocity
|
|
print " samples: %d" % num_samples
|
|
print " channels: %d" % num_channels
|
|
print ""
|
|
print "Read %d angles" % len(angles)
|
|
print "Read %d ranges" % len(ranges)
|
|
print "Read %d magnitudes" % len(magnitude)
|
|
print "Read %d raw data points" % len(raw_data)
|
|
print ""
|
|
print "Deserialization took %f seconds" % (end - start)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|