from qt import QApplication, QObject import qtreactor class QTwistedClientApplication(QApplication): def __init__(self, factory = None): if factory == None: self.factory = StdClientFactory(self) else: self.factory = factory qtreactor.install(self) def connect (host, port): from twisted.internet import reactor reactor.connectTCP(host, port, self.factory) from twisted.internet.protocol import ClientFactory class StdClientFactory(ClientFactory): def __init__(self, qapp): self.qapp = qapp def buildProtocol(self, addr): p = StdLineReceiverClient(self.qapp, addr) p.factory = self return p from twisted.protocols.basic import LineReceiver class StdLineReceiver(LineReceiver, QObject): def __init__(self, qapp, addr): self.qapp = qapp self.addr = addr self.qapp.protocol = self ## self.qapp.sendLine = self.sendLine ## self.qapp.setLineMode = self.setLineMode ## self.qapp.setRawMode = self.setRawMode ## self.qapp.clearLineBuffer = self.clearLineBuffer ## self.qapp.makeConnection = self.makeConnection ## self.qapp.loseConnection = self.transport.loseConnection() def loseConnection(self): """ Not sure if this whole method is a good idea. """ self.transport.loseConnection() self.qapp.protocol = None def connectionMade(self): self.qapp.emit(PYSIGNAL("connectionMade"), self.addr) def connectionLost(self): self.qapp.emit(PYSIGNAL("connectionLost"), self.addr) def lineReceived(self, line): self.qapp.emit(PYSIGNAL("lineReceived"), line) def dataReceived(self, data): self.qapp.emit(PYSIGNAL("dataReceived"), data) def rawDataReceived(self, raw_data): self.qapp.emit(PYSIGNAL("rawDataReceived"), raw_data) def lineLengthExceeded(self, lineChunk): self.qapp.emit(PYSIGNAL("lineLengthExceeded"), lineChunk)