Adding the start of a server for the models

This commit is contained in:
Nate Koenig 2012-09-07 17:02:52 -07:00
parent 6692bd5c02
commit b8ed5e3645
6 changed files with 279 additions and 0 deletions

28
server/client.py Executable file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env python
import socket
import request_pb2
TCP_IP = '127.0.0.1'
TCP_PORT = 5014
BUFFER_SIZE = 1024
msg = request_pb2.Request()
msg.id = int(0)
msg.request = "models"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(msg.SerializeToString())
data = s.recv(BUFFER_SIZE)
s.close()
response = request_pb2.Response()
response.ParseFromString(data)
model_list = request_pb2.ModelList()
model_list.ParseFromString(response.data)
print "response:", response
print "models:", model_list.model

7
server/manifest.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" ?>
<models>
<model>turtlebot</model>
<model>willowgarage</model>
<model>kinect</model>
<model>pioneer2dx</model>
</models>

21
server/request.proto Normal file
View File

@ -0,0 +1,21 @@
package gazebo_models;
message Request
{
required int32 id = 1;
required string request = 2;
}
message Response
{
required int32 id = 1;
required string request = 2;
required string response = 3;
optional string type = 4;
optional bytes data = 5;
}
message ModelList
{
repeated string model = 1;
}

159
server/request_pb2.py Normal file
View File

@ -0,0 +1,159 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
from google.protobuf import descriptor
from google.protobuf import message
from google.protobuf import reflection
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
DESCRIPTOR = descriptor.FileDescriptor(
name='request.proto',
package='gazebo_models',
serialized_pb='\n\rrequest.proto\x12\rgazebo_models\"&\n\x07Request\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x0f\n\x07request\x18\x02 \x02(\t\"U\n\x08Response\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x0f\n\x07request\x18\x02 \x02(\t\x12\x10\n\x08response\x18\x03 \x02(\t\x12\x0c\n\x04type\x18\x04 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\"\x1a\n\tModelList\x12\r\n\x05model\x18\x01 \x03(\t')
_REQUEST = descriptor.Descriptor(
name='Request',
full_name='gazebo_models.Request',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
descriptor.FieldDescriptor(
name='id', full_name='gazebo_models.Request.id', index=0,
number=1, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
descriptor.FieldDescriptor(
name='request', full_name='gazebo_models.Request.request', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=unicode("", "utf-8"),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
extension_ranges=[],
serialized_start=32,
serialized_end=70,
)
_RESPONSE = descriptor.Descriptor(
name='Response',
full_name='gazebo_models.Response',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
descriptor.FieldDescriptor(
name='id', full_name='gazebo_models.Response.id', index=0,
number=1, type=5, cpp_type=1, label=2,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
descriptor.FieldDescriptor(
name='request', full_name='gazebo_models.Response.request', index=1,
number=2, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=unicode("", "utf-8"),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
descriptor.FieldDescriptor(
name='response', full_name='gazebo_models.Response.response', index=2,
number=3, type=9, cpp_type=9, label=2,
has_default_value=False, default_value=unicode("", "utf-8"),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
descriptor.FieldDescriptor(
name='type', full_name='gazebo_models.Response.type', index=3,
number=4, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=unicode("", "utf-8"),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
descriptor.FieldDescriptor(
name='data', full_name='gazebo_models.Response.data', index=4,
number=5, type=12, cpp_type=9, label=1,
has_default_value=False, default_value="",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
extension_ranges=[],
serialized_start=72,
serialized_end=157,
)
_MODELLIST = descriptor.Descriptor(
name='ModelList',
full_name='gazebo_models.ModelList',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
descriptor.FieldDescriptor(
name='model', full_name='gazebo_models.ModelList.model', index=0,
number=1, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
extension_ranges=[],
serialized_start=159,
serialized_end=185,
)
DESCRIPTOR.message_types_by_name['Request'] = _REQUEST
DESCRIPTOR.message_types_by_name['Response'] = _RESPONSE
DESCRIPTOR.message_types_by_name['ModelList'] = _MODELLIST
class Request(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _REQUEST
# @@protoc_insertion_point(class_scope:gazebo_models.Request)
class Response(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _RESPONSE
# @@protoc_insertion_point(class_scope:gazebo_models.Response)
class ModelList(message.Message):
__metaclass__ = reflection.GeneratedProtocolMessageType
DESCRIPTOR = _MODELLIST
# @@protoc_insertion_point(class_scope:gazebo_models.ModelList)
# @@protoc_insertion_point(module_scope)

BIN
server/request_pb2.pyc Normal file

Binary file not shown.

64
server/server.py Executable file
View File

@ -0,0 +1,64 @@
#!/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 = 5018
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:
print "here"
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()