class clientTCP(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(clientTCP, self).__init__(oscprefix=oscprefix, verbose=verbose) self.remote = (host, port) ## FIXXME: 'host' is not canonicalized self.keepListening=True self.slip = SLIP() self.socket = QTcpSocket() self.socket.readyRead.connect(self._callback) self.socket.connectToHost(host, port); self.sender=(host, port) 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. Starts a handler for each connection.''' ## while self.socket.hasPendingDatagrams(): ## datagram, sender, senderPort = self.socket.readDatagram(self.socket.pendingDatagramSize()) ## self.addressManager.handle(datagram.data(), (sender.toString(), senderPort)) data=str(self.socket.readAll()) self.slip.append(data) for d in self.slip.get(): self.addressManager.handle(d, self.sender) 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))) slip = SLIP(); slip+=data; sdata=str(slip.getData()) self.socket.writeData(sdata, len(sdata))