module_client.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: utf-8 -*-
00003 # Copyright: Yuki Furuta <furushchev@jsk.imi.i.u-tokyo.ac.jp>
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


julius_ros
Author(s): Yuki Furuta
autogenerated on Sat Sep 9 2017 02:33:31