gazebo_models/server/server.py
2012-09-13 15:31:50 -07:00

64 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python
import socket
import struct
from sys import *
from xml.dom import minidom
import request_pb2
TCP_IP = '127.0.0.1'
TCP_PORT = 50199
BUFFER_SIZE = 1024
models = []
#################################################
# Read the main manifest file
def read_manifest():
xmldoc = minidom.parse('manifest.xml')
model_list = xmldoc.getElementsByTagName("model")
for model in model_list:
model_name = model.childNodes[0].data
models.append(model_name)
read_manifest()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connection address:', addr
while 1:
request = request_pb2.Request()
data = conn.recv(BUFFER_SIZE)
if not data:
break
request.ParseFromString(data)
print "Request: ", request.request
response = request_pb2.Response()
response.id = request.id
response.request = request.request
if request.request == "models":
response.response = "success"
model_list_msg = request_pb2.ModelList()
response.type = model_list_msg.DESCRIPTOR.full_name
for m in models:
model_list_msg.model.append(m)
response.data = model_list_msg.SerializeToString()
print "Response Size:", len(response.SerializeToString())
hex_size = hex(len(response.SerializeToString()))
conn.send(hex_size.rjust(8))
conn.send(response.SerializeToString()) # echo
conn.close()