All pastes #450296 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-04-20 19:04 UTC
rendered paste body
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)