Go to the documentation of this file.00001
00002
00003
00004
00005 import os
00006 import rospy
00007 from julius_ros.transport import SocketTransport
00008 from Queue import Queue
00009 import lxml.etree
00010 import traceback
00011 from xml.sax.saxutils import escape
00012
00013
00014 class ModuleClient(SocketTransport):
00015 def __init__(self, host, port, max_retry, encoding="utf-8"):
00016 super(ModuleClient, self).__init__(host, port, max_retry)
00017 self.encoding = encoding
00018
00019 def send_command(self, cmds):
00020 data = os.linesep.join(cmds) + os.linesep
00021 self.send(data)
00022 rospy.sleep(0.05)
00023
00024 def parse(self, data):
00025 parsed = data.split("." + os.linesep)
00026 if len(parsed) < 2:
00027 raise ValueError("Received data too short")
00028 parsed_data = [self.parse_xml(d) for d in parsed[:-1]]
00029 parsed_length = len(data) - len(parsed[-1])
00030 return parsed_data, parsed_length
00031
00032 def parse_xml(self, data):
00033 try:
00034 data = data.decode(self.encoding)
00035 data = self.validate_xml(data)
00036 xml = lxml.etree.fromstring(data)
00037 return xml.tag, xml
00038 except Exception as e:
00039 raise RuntimeError(e)
00040
00041 def validate_xml(self, data):
00042 parsed = data.split('"')
00043 for i in range(len(parsed))[1::2]:
00044 parsed[i] = escape(parsed[i])
00045 return '"'.join(parsed)
00046
00047 if __name__ == '__main__':
00048 pass