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
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()