示例#1
0
    def __init__(self, osc_name, osc_port, regtype='_osc._udp', **kwargs):
        """
        Initialize OscInterface.
        
        @type osc_name: C{str}
        @param osc_name: Name of the Bonjour service to register.
        @type osc_port: C{int}
        @param osc_port: Port that the OSC server will listen on.
        @type regtype: C{str}
        @param regtype: An appropriate registration type.  Currently only 
        '_osc._udp' is supported.
        """
        rospy.init_node("osc_interface", **kwargs)
        rospy.core.add_shutdown_hook(self._shutdown_by_ros)
        reactor.addSystemEventTrigger('after', 'shutdown',
                                      self._shutdown_by_reactor)

        self.ros_name = rospy.get_name()
        self.osc_name = rospy.get_param("~osc_name", osc_name)
        self.osc_port = rospy.get_param("~port", osc_port)
        self.osc_regtype = rospy.get_param("~regtype", regtype)
        self.print_fallback = rospy.get_param("~print_fallback", True)

        if self.print_fallback:
            rospy.loginfo("Logging all unhandled messages to rospy.loginfo")

        # Bonjour Server
        self._bonjour_server = Bonjour(self.osc_name, self.osc_port,
                                       self.osc_regtype,
                                       debug=rospy.logdebug,
                                       info=rospy.logdebug,
                                       error=rospy.logdebug)

        self._bonjour_server.setClientCallback(self.bonjour_client_callback)

        reactor.callInThread(self._bonjour_server.run, daemon=True)

        self._clients = {}
        self._clients_lock = threading.Lock()

        # Twisted OSC receiver
        self._osc_receiver = RosOscReceiver()
        listener = async.DatagramServerProtocol(self._osc_receiver)
        self._osc_receiver_port = reactor.listenUDP(self.osc_port,
                                                    listener)

        # Twisted OSC Sender
        self._osc_sender = async.DatagramClientProtocol()
        self._osc_sender_port = reactor.listenUDP(0, self._osc_sender)

        # Add OSC callbacks
        self._osc_receiver.fallback = self.fallback
示例#2
0
 def test_bonjour(self):
     try:
         b = Bonjour("Bonjour listener", 1234, '_touchosceditor._tcp')
         b.setClientCallback(self.clientCallback)
         b.run_browser()
         while self.clients == {}:
             time.sleep(1.0)
         self.assertEqual(self.clients.keys()[0], self.name.encode('utf-8'),
                          "Bonjour: Registration Failed")
         vals = self.clients.values()[0]
         self.assertEqual(vals['port'], self.port,
                          "Bonjour: Registered Port Mismatch")
     finally:
         b.stop_browser()