Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 """ The node provided by this file exposes a helper service used by
00037 the C++ rosserial_server. The service allows the C++ driver to look
00038 up message definitions and hash strings which would not have been
00039 known to it at compile time, allowing it to fully advertise topics
00040 originating from microcontrollers.
00041
00042 This allows rosserial_server to be distributed in binary form. """
00043
00044 import rospy
00045 from rosserial_msgs.srv import RequestMessageInfo
00046 from rosserial_python import load_message
00047
00048
00049 class MessageInfoService(object):
00050 """ """
00051 def __init__(self):
00052 rospy.init_node("message_info_service")
00053 rospy.loginfo("rosserial message_info_service node")
00054 self.service = rospy.Service("message_info", RequestMessageInfo, self._cb)
00055 self.cache = {}
00056
00057 def _cb(self, req):
00058 package_message = tuple(req.type.split("/"))
00059 if not self.cache.has_key(package_message):
00060 rospy.loginfo("Loading module to return info on %s/%s." % package_message)
00061 msg = load_message(*package_message)
00062 self.cache[package_message] = (msg._md5sum, msg._full_text)
00063 else:
00064 rospy.loginfo("Returning info from cache on %s/%s." % package_message)
00065
00066 return self.cache[package_message]
00067
00068 def spin(self):
00069 rospy.spin()
00070
00071 if __name__=="__main__":
00072 MessageInfoService().spin()