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