Esempio n. 1
0
class serverUDP(serverAbstract.serverAbstract):
    """ OSC-server running on GOD.
    sends OSC-messages to SMi.
    receives OSC-messages from SMi (and emits signals with the data)
    """

    def __init__(self, host='', port=0, oscprefix=None, service=None, verbose=False):
        """creates a listener on any (or specified) port"""
        super(serverUDP, self).__init__(port=port, oscprefix=oscprefix, verbose=verbose)
        self.keepListening=True

        self.socket = QUdpSocket()
        if host is None or host == '':
            r=self.socket.bind(port)
        else:
            qhost=QHostAddress(host)
            r=self.socket.bind(qhost, port)
        self.socket.readyRead.connect(self._callback)
        self.remote = (host, port) ## FIXXME: 'host' is not canonicalized

        if service is not None:
            self.publisher = publisher(port=port, name=self.publishname, service=service+'._udp')

    def __del__(self):
        self.shutdown()

    def shutdown(self):
        self.keepListening=False
        if self.socket is not None:
            try:
                self.socket.shutdown()
                self.socket.close()
            except:
                pass
        if self.addressManager is not None:
            del self.addressManager
            self.addressManager = None
        self.remote = None
        self.socket = None

    def _callback(self):
        '''Asynchronous connection listener. Receives data and passes it to OSC-addressManager.'''
        while self.socket.hasPendingDatagrams():
            datagram, sender, senderPort = self.socket.readDatagram(self.socket.pendingDatagramSize())
            if self.addressManager is not None:
                self.remote=(sender.toString(), senderPort)
                self.addressManager.handle(datagram.data(), self.remote)

    def _send(self, data):
        from PySide.QtNetwork import QHostAddress
        if self.socket is not None and self.remote is not None:
            logging.log(1, "serverUDP(PySide).sending '%s' to %s" % (str(data), str(self.remote)))
            self.socket.writeDatagram(data, QHostAddress(self.remote[0]), self.remote[1])

    def getPort(self):
        return self.socket.localPort()
Esempio n. 2
0
class clientUDP(clientAbstract.clientAbstract):
    """ OSC-client running on GOD.
    sends OSC-messages to SMi.
    receives OSC-messages from SMi (and emits signals with the data)
    """

    def __init__(self, host, port, oscprefix='', verbose=False):
        super(clientUDP, self).__init__(oscprefix=oscprefix, verbose=verbose)
        self.keepListening=True
        adr=resolv.getAddress(host, False)

        self.socket = QUdpSocket()
        self.socket.readyRead.connect(self._callback)
        self.socket.connectToHost(adr, port);
        self.remote = (adr, self.socket.peerPort())

    def __del__(self):
        self.shutdown()

    def shutdown(self):
        self.keepListening=False
        if self.socket is not None:
            try:
                self.socket.shutdown()
                self.socket.close()
            except:
                pass
        if self.addressManager is not None:
            del self.addressManager
            self.addressManager = None
        self.remote = None
        self.socket = None

    def _callback(self):
        '''Asynchronous connection listener. Receives data and passes it to OSC-addressManager.'''
        while self.socket.hasPendingDatagrams():
            datagram, sender, senderPort = self.socket.readDatagram(self.socket.pendingDatagramSize())
            if self.addressManager:
                self.addressManager.handle(datagram.data(), (sender.toString(), senderPort))

    def _send(self, data):
        if self.socket is not None and self.remote is not None:
            logging.log(1, "sending '%s' to %s" % (str(data), str(self.remote)))

            self.socket.writeDatagram(data, QHostAddress(self.remote[0]), self.remote[1])