[Twisted-Python] How to use the TimeoutProtocol policy?
Martin van Es
mrvanes at gmail.com
Thu Jun 14 07:29:20 MDT 2018
Hi,
I'm trying to timeout a really simple LineReceiver protocol.
It's function is to connect to a daemon, receive a line that's to be
displayed to an end-user upon which the user should undertake some
action. The action will trigger a second line (fail/success) at which
point the daemon will close the connection. If, however, the end-user
does not follow-up on the first challenge I want the script to timeout
with a failed result.
Now, I have the LineReceiver do exactly what I want, but I can't for
the life of me understand how I should "wrap" it in the TimoutProtocol
so that it disconnects after a couple of seconds?
This is my Factory:
class WebSSOFactory(ClientFactory):
pamh = None
client = None
def __init__(self, pamh):
self.pamh = pamh
def clientConnectionLost(self, connector, reason):
reactor.stop()
def buildProtocol(self, addr):
client = WebSSOClient()
#client = TimeoutProtocol(self, WebSSOClient, 5)
client.pamh = self.pamh
self.client = client
return client
And this is the protocol:
class WebSSOClient(LineReceiver):
line = None
pamh = None
state = 'start'
def __init__(self):
print("__init__")
self.setTimeout(5)
def lineReceived(self, line):
print("lineReceived")
self.line = line
if self.state == 'start':
self.pamh.conversation(self.pamh.Message(self.pamh.PAM_PROMPT_ECHO_OFF,
"Visit http://***/login/%s to login\nand press <enter> to continue." %
line))
self.state = None
else:
self.transport.loseConnection()
Before anyone starts to scream http (no s): This is all test/debug. I
want the timeout to work before I deploy to something more serious.
The client is loaded straightforward using a reactor.connectTCP() with
the instantiated factory object.
Best regards,
Martin
--
If 'but' was any useful, it would be a logic operator
More information about the Twisted-Python
mailing list