message_info_service.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 #####################################################################
00004 # Software License Agreement (BSD License)
00005 #
00006 # Copyright (c) 2013, Clearpath Robotics
00007 # All rights reserved.
00008 #
00009 # Redistribution and use in source and binary forms, with or without
00010 # modification, are permitted provided that the following conditions
00011 # are met:
00012 #
00013 #  * Redistributions of source code must retain the above copyright
00014 #    notice, this list of conditions and the following disclaimer.
00015 #  * Redistributions in binary form must reproduce the above
00016 #    copyright notice, this list of conditions and the following
00017 #    disclaimer in the documentation and/or other materials provided
00018 #    with the distribution.
00019 #  * Neither the name of Willow Garage, Inc. nor the names of its
00020 #    contributors may be used to endorse or promote products derived
00021 #    from this software without specific prior written permission.
00022 #
00023 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00029 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00033 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034 # POSSIBILITY OF SUCH DAMAGE.
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()


rosserial_python
Author(s): Michael Ferguson
autogenerated on Fri Aug 28 2015 12:44:45