[Twisted-Python] Question about ReconnectingClientFactory and conch StatefulTelnetProtocol

Mark Bailey mebly5343 at gmail.com
Fri Feb 5 19:23:04 EST 2010


Good day, everyone:

Continuing my effort to learn Python and Twisted, I need to create several
Telnet clients and somehow send two arguments to each and receive data from
each.

I tried the same pattern that I used with the Telnet server and created a
Factory, actually a ReconnectingClientFactory.  It doesn't work.  My source
and the error (no attribute 'factory') are below.

Do the "conch" protocols not support a factory?  Is there an alternative
that provides a Telnet client with a lineReceived method?

What am I doing wrong?  :-)  I suppose I could pass arguments to
ClusterClient by overriding __init__, but that seems inelegant.

Thanks for your help.

Mark

----------

from twisted.internet.protocol import Protocol, ReconnectingClientFactory
from sys import stdout

from twisted.internet import reactor

from twisted.conch.telnet import StatefulTelnetProtocol

class ClusterClient(StatefulTelnetProtocol):

    def lineReceived(self, data):
        print self.factory.prompt, self.factory.call
        print data

class ClusterClientFactory(ReconnectingClientFactory):

    protocol = ClusterClient

    def __init__(self):
        self.prompt = "call:"
        self.call = "kd4d"

    def startedConnecting(self, connector):
        print 'Started to connect.'

    def buildProtocol(self, addr):
        print 'Connected.'
        self.resetDelay()
        return ClusterClient()

    def clientConnectionLost(self, connector, reason):
        print 'Lost connection.  Reason:', reason
        ReconnectingClientFactory.clientConnectionLost(self, connector,
reason)

    def clientConnectionFailed(self, connector, reason):
        print 'Connection failed. Reason:', reason
        ReconnectingClientFactory.clientConnectionFailed(self, connector,
                                                         reason)
if __name__ == '__main__':
    factory = ClusterClientFactory()
    factory.maxDelay = 120  #  two minutes
    print factory.prompt, factory.call
    reactor.connectTCP("localhost", 8023, factory)


    reactor.run()

-----------------

  File "ClusterClient.py", line 11, in lineReceived
    print self.factory.prompt, self.factory.call
exceptions.AttributeError: ClusterClient instance has no attribute 'factory'
Lost connection.  Reason: [Failure instance: Traceback (failure with no
frames):
 <type 'exceptions.AttributeError'>: ClusterClient instance has no attribute
'fa
ctory'
]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20100205/a725d2ac/attachment.htm 


More information about the Twisted-Python mailing list