Example #1
0
    def testEquality(self):

        self.assertEquals(osc.Bundle(), osc.Bundle())
        self.assertNotEqual(osc.Bundle(), None)
        self.assertNotEqual(osc.Bundle([osc.Message("/hello")]), osc.Bundle())
        self.assertEquals(osc.Bundle([osc.Message("/hello")]),
                          osc.Bundle([osc.Message("/hello")]))
        self.assertNotEqual(osc.Bundle([osc.Message("/hello")]),
                            osc.Bundle([osc.Message("/hello2")]))
Example #2
0
    def testDispatching(self):

        hello = osc.Message("/hello")
        there = osc.Message("/there")
        addr = ("0.0.0.0", 17778)

        def cb(message, a):
            self.assertEquals(message, hello)
            self.assertEquals(addr, a)
            state['cb'] = True

        def cb2(message, a):
            self.assertEquals(message, there)
            self.assertEquals(addr, a)
            state['cb2'] = True

        recv = dispatch.Receiver()
        recv.addCallback("/hello", cb)
        recv.addCallback("/there", cb2)

        state = {}
        recv.dispatch(hello, addr)
        self.assertEquals(state, {'cb': True})

        state = {}
        recv.dispatch(osc.Bundle([hello, there]), addr)
        self.assertEquals(state, {'cb': True, 'cb2': True})
Example #3
0
 def diag_cb(self, msg):
     self.diagnostics_data.add_message(msg)
     for addr, client in self.osc_clients.iteritems():
         if client.active:
             to_display = client.update_diagnostics_display(fader=True)
             to_display.extend(client.update_detail_display(fader=True))
             self.send(osc.Bundle(to_display), clients=[addr])
     self.send(osc.Message("rostime", str(rospy.Time.now().to_sec())))
Example #4
0
 def multixy(self, address_list, value_list, send_address):
     rospy.loginfo("multixy From: %s" % send_address[0])
     print "/".join(address_list)
     bundle = osc.Bundle()
     bundle.add(osc.Message('xy', value_list[0], value_list[1]))
     self.send(bundle, tabpages=['3', '4'])
     self.send(osc.Message('xy', value_list[1], value_list[0]),
               tabpages=['2'])
Example #5
0
 def cb_client_disconnected(self, client):
     if client == self.master_osc:
         self.holonomic = self.default_mode
         self.running = False
         self.send(
             osc.Bundle(
                 [osc.Message('control', 0.0),
                  osc.Message('master', '')]))
         self.master_osc = None
     self.active_clients.discard(client)
Example #6
0
    def testGetMessages(self):

        m1 = osc.Message("/foo")
        m2 = osc.Message("/bar")
        m3 = osc.Message("/foo/baz")

        b = osc.Bundle()
        b.add(m1)
        self.assertEquals(b.getMessages(), set([m1]))

        b = osc.Bundle()
        b.add(m1)
        b.add(m2)
        self.assertEquals(b.getMessages(), set([m1, m2]))

        b = osc.Bundle()
        b.add(m1)
        b.add(osc.Bundle([m2]))
        b.add(osc.Bundle([m3]))
        self.assertEquals(b.getMessages(), set([m1, m2, m3]))
Example #7
0
 def darray_cb(self, address_list, value_list, send_address):
     try:
         client = self.osc_clients[send_address[0]]
     except:
         return
     if len(address_list) == 4:
         client.set_detailed_display(int(address_list[3]) - 1)
         client.detail_offset = 0
         to_display = client.update_diagnostics_display(fader=True)
         to_display.extend(client.update_detail_display(fader=True))
         self.send(osc.Bundle(to_display), clients=[send_address[0]])
Example #8
0
    def testToAndFromBinary(self):

        self.assertRaises(osc.OscError, osc.Bundle.fromBinary,
                          "invalidbinarydata..")
        self.assertRaises(osc.OscError, osc.Bundle.fromBinary,
                          "#bundle|invalidbinarydata..")
        self.assertRaises(osc.OscError, osc.Bundle.fromBinary,
                          "#bundle\0\0\0\0\1\0\0\0\0hello")
        self.assertRaises(osc.OscError, osc.Bundle.fromBinary,
                          "#bundle\0\0\0\0\1\0\0\0\0\0\0\0\5hellofdsfds")

        def test(b):
            binary = b.toBinary()
            b2, leftover = osc.Bundle.fromBinary(binary)
            self.assertEquals(leftover, "")
            self.assertEquals(b, b2)

        test(osc.Bundle())
        test(osc.Bundle([osc.Message("/foo")]))
        test(osc.Bundle([osc.Message("/foo"), osc.Message("/bar")]))
        test(
            osc.Bundle([
                osc.Message("/foo"),
                osc.Message("/bar", osc.StringArgument("hello"))
            ]))

        nested = osc.Bundle([osc.Message("/hello")])
        test(osc.Bundle([nested, osc.Message("/foo")]))
Example #9
0
 def diagsw_cb(self, address_list, value_list, send_address):
     if not self.osc_clients.has_key(send_address[0]):
         self.cb_client_connected(send_address[0])
     if value_list[0] == 0.0:
         client = self.osc_clients[send_address[0]]
         to_display = client.clear_display()
         if client.topic == "/diagnostics":
             client.topic = "/diagnostics_agg"
             client.diag_db = self.diagnostics_agg_data
         else:
             client.topic = "/diagnostics"
             client.diag_db = self.diagnostics_data
         to_display.append(osc.Message("diaglbl", client.topic))
         to_display.extend(client.update_diagnostics_display(fader=True))
         to_display.extend(client.update_detail_display(fader=True))
         self.send(osc.Bundle(to_display), clients=[send_address[0]])
Example #10
0
 def zero_command(self):
     self.send(
         osc.Bundle([
             osc.Message('xy', 0.0, 0.0),
             osc.Message('w', 0.0),
             osc.Message('control', 0.0),
             osc.Message('mapping', 0.0),
             osc.Message('turbo', 0.0),
             osc.Message('mapping_label', "holonomic"),
             osc.Message('master', "")
         ]))
     self.cmd.linear.x = 0.0
     self.cmd.linear.y = 0.0
     self.cmd.angular.z = 0.0
     self.holonomic = True
     self.running = False
Example #11
0
 def d_updown_cb(self, address_list, value_list, send_address):
     if self.osc_clients.has_key(send_address[0]):
         client = self.osc_clients[send_address[0]]
         offset = client.diagnostics_offset
         if address_list[1] == 'ddown':
             client.diagnostics_offset += 1
             fader = True
         elif address_list[1] == 'dup':
             client.diagnostics_offset -= 1
             fader = True
         elif address_list[1] == 'dfader':
             max_offset = client.get_max_diagnostics_offset()
             client.diagnostics_offset = int(
                 round(value_list[0] * max_offset))
             fader = False
         to_display = client.update_diagnostics_display(fader=fader)
         self.send(osc.Bundle(to_display), clients=[send_address[0]])
Example #12
0
 def publish_cmd(self):
     """
     Callback for a periodic publish update.  Do not publish if there are no active clients.
     """
     if self.master_osc and len(self.active_clients) != 0:
         if self.master_osc and self.master_osc not in self.active_clients:
             self.send(
                 osc.Bundle([
                     osc.Message('control', 0.0),
                     osc.Message('master', '')
                 ]))
             self.master_osc = None
         elif self.master_osc:
             self.send(osc.Message('control', 1.0),
                       clients=[self.master_osc])
         self.pub.publish(self.cmd)
     reactor.callLater(1.0 / self.minPublishFreq, self.publish_cmd)
Example #13
0
 def reset_tabpage(self, client):
     bundle = osc.Bundle()
     bundle.add(osc.Message('xy', 0.0, 0.0))
     bundle.add(osc.Message('w', 0.0))
     if self.master_osc:
         bundle.add(osc.Message('control', 1.0))
         bundle.add(osc.Message('master', self.master_osc))
     else:
         bundle.add(osc.Message('control', 0.0))
         bundle.add(osc.Message('master', ''))
     if self.holonomic:
         bundle.add(osc.Message('mapping_label', 'Holonomic'))
         bundle.add(osc.Message('w/visible', 1.0))
     else:
         bundle.add(osc.Message('mapping_label', 'Differential'))
         bundle.add(osc.Message('w/visible', 0.0))
     bundle.add(osc.Message('mapping', 0.0))
     if self.running:
         bundle.add(osc.Message('turbo', 1.0))
     else:
         bundle.add(osc.Message('turbo', 0.0))
     self.send(bundle, clients=[client])
Example #14
0
 def cb_client_connected(self, client):
     """
     Callback for when a client has connected.
     
     Add the client to the local dictionary of clients and initialize it.
     """
     parent_client = self.parent.clients[client]
     self.osc_clients[client] = DiagnosticsClient(parent_client.servicename,
                                                  parent_client.client_type,
                                                  self.start_topic)
     if self.start_topic == "/diagnostics":
         self.osc_clients[client].diag_db = self.diagnostics_data
     elif self.start_topic == "/diagnostics_agg":
         self.osc_clients[client].diag_db = self.diagnostics_agg_data
     else:
         raise ValueError
     to_display = []
     to_display.extend(self.osc_clients[client].clear_display())
     to_display.append(
         osc.Message("diaglbl", self.osc_clients[client].topic))
     self.send(osc.Bundle(to_display), clients=[client])
     self.osc_clients[client].active = True
Example #15
0
 def kv_updown_cb(self, address_list, value_list, send_address):
     """
     Callback for up and down buttons as well as the slider for the 
     detailed display list
     
     @param address_list: OSC address of the incoming message
     @param value_list: OSC value arguments of the incoming message
     @param send_address: IP and port of the originating client
     """
     if self.osc_clients.has_key(send_address[0]):
         client = self.osc_clients[send_address[0]]
         if address_list[1] == 'kvdown':
             client.detail_offset += 1
             fader = True
         elif address_list[1] == 'kvup':
             client.detail_offset -= 1
             fader = True
         elif address_list[1] == 'kvfader':
             max_offset = client.get_max_detail_offset()
             client.detail_offset = int(round(value_list[0] * max_offset))
             fader = False
         to_display = client.update_detail_display(fader=fader)
         self.send(osc.Bundle(to_display), clients=[send_address[0]])
Example #16
0
    def testBundle(self):

        pingMsg = osc.Message("/ping")
        bundle = osc.Bundle()
        bundle.add(osc.Message("/pong"))
        bundle.add(pingMsg)
        bundle.add(osc.Message("/foo/bar", 1, 2))

        d = defer.Deferred()

        def ping(m, addr):
            self.assertEquals(m, pingMsg)
            d.callback(True)

        d2 = defer.Deferred()

        def foo(m, addr):
            self.assertEquals(m, osc.Message("/foo/bar", 1, 2))
            d2.callback(True)

        self.receiver.addCallback("/ping", ping)
        self.receiver.addCallback("/foo/*", foo)
        self._send(bundle)
        return defer.DeferredList([d, d2])
Example #17
0
 def send_osc_message(self, frame_id, to_send):
     self.send(osc.Bundle(to_send))
Example #18
0
    def send(self, element, clients=None, tabpages=None):
        """
        Send an OSC message or bundle to a client or list of clients
        
        C{send} has several behaviors.  Any combination of the below behaviors
        may be used in custom tabpage handlers.
        
        @param element: OSC message or bundle to send.
        @type element: C{osc.Message} or C{osc.Bundle}
        @param clients: Clients to send to.
        @type clients: C{list}
        @param tabpages: Tabpages to send to.
        @type tabpages: C{list}
        
        Send to All
        ===========
            Sends an  an element (C{osc.Message} or C{osc.Bundle})
            prepended with all registered tabpage names to all clients found
            on the network.
        
            Example
            -------
            For this example, assume:
              -  Handler was registered with two names "tab1" and "tab2"
              -  There are two clients "client1" and "client2"
                 (These will actually be IP addresses, in practice)
             
            The following command yields:
            
            >>> self.send(osc.Message('fader',0.0))
            osc.send(osc.Message('/tab1/fader',0.0),client1)
            osc.send(osc.Message('/tab2/fader',0.0),client1)
            osc.send(osc.Message('/tab1/fader',0.0),client2)
            osc.send(osc.Message('/tab2/fader',0.0),client2)
            
        Send to a particular client
        ===========================
            Sends an element to a specified client (or list of clients).
            Prepends all registered tabpage names to all the clients in the 
            list.
            
            Example
            -------
            For this example, assume:
              - Handler was registered with two names "tab1" and "tab2"
              - There are two clients "client1" and "client2"
                (These will actually be IP addresses, in practice)
              
            The following command yields:
            
            >>> self.send(osc.Message('fader',0.0),clients=['client1'])
            osc.send(osc.Message('/tab1/fader',0.0),client1)
            osc.send(osc.Message('/tab2/fader',0.0),client1)
            
        Send to a particular tabpage
        ============================
            Sends an element to all clients, but only a specified tabpage (or
            list of tabpages).
            
            Example
            -------
            For this example, assume:
              -  Handler was registered with two names "tab1" and "tab2"
              -  There are two clients "client1" and "client2"
                 (These will actually be IP addresses, in practice)
             
            The following command yields:
            
            >>> self.send(osc.Message('fader',0.0),tabpages=['tab1'])
            osc.send(osc.Message('/tab1/fader',0.0),client1)
            osc.send(osc.Message('/tab1/fader',0.0),client2)
            
        Send to a particular client and tabpage
        =======================================
            Sends an element to a specific client (or a list of clients), 
            and a specified tabpage (or list of tabpages).
            
            Example
            -------
            For this example, assume:
              -  Handler was registered with two names "tab1" and "tab2"
              -  There are two clients "client1" and "client2"
                 (These will actually be IP addresses, in practice)
             
            The following command yields:
            
            >>> self.send(osc.Message('fader',0.0),clients=['client1'],
            ...                                    tabpages=['tab1'])
            osc.send(osc.Message('/tab1/fader',0.0),client1)
        """
        if type(element) is not osc.Message and type(element) is not osc.Bundle:
            raise ValueError("element must be a message or bundle")

        reg_clients = self.parent.clients

        if clients:
            if type(clients) is str:
                iter_clients = [clients]
            elif type (clients) is list:
                iter_clients = clients
        else:
            iter_clients = reg_clients.keys()

        if tabpages:
            if type(tabpages) is str:
                iter_tabpages = [tabpages]
            elif type(tabpages) is list:
                iter_tabpages = tabpages
        else:
            iter_tabpages = self.tabpage_names

        for destination in iter_clients:
            clientBundle = osc.Bundle()
            for tab in iter_tabpages:
                elem = copy.copy(element)
                basename = '/' + tab
                if type(elem) is osc.Bundle:
                    for msg in elem.getMessages():
                        clientBundle.add(osc.Message('/'.join([basename,
                                                               msg.address]),
                                                     *msg.getValues()))
                elif type(elem) is osc.Message:
                    elem.address = '/'.join([basename, elem.address])
                    clientBundle.add(elem)
            try:
                dest_address = reg_clients[destination].send_tuple
                self.parent._osc_sender.send(clientBundle, dest_address)
            except KeyError:
                continue