[Twisted-Python] Not understanding buildProtocol(), any clarification?
John Crawford
cyclops at speakeasy.net
Wed Sep 30 14:16:48 MDT 2009
Hello, I'm trying to understand and use buildProtocol(), which isn't
working as I expected, in two ways :) Question 1. If I have, on the
Server side:
class MyFactory(Factory):
protocol = MyTestProtocol
def buildProtocol(self, addr):
p = Factory.buildProtocol(self, addr)
p.transport.write('connected.\n')
return p
Should this work? Would the write() function execute? I thought that
'p' was a fully usable Protocol object at that point, but Python
disagrees with me :) Tells me it's a 'Nonetype' with no write()
method. If I take out the write(), everything works fine, I can
communicate between client/server, so no problems in the rest of the code.
Question 2. If I use buildProtocol() on the Server side to *not* make
a connection, as:
class MyFactory(Factory):
protocol = MyTestProtocol
def buildProtocol(self, addr):
if (some condition):
return Factory.buildProtocol(self, addr)
else:
return None
What is supposed to happen on the Client Side when I return None? I
was thinking that my factory's clientConnectionFailed() would fire,
indicating that the Server refused a connection.
Instead, what I get is my Client's connectionMade() firing,
immediately followed by a clientConnectionLost() firing, as if the
connection was made then dropped.
Just to check, I changed it to:
buildProtocol(self, addr):
return None
which behaved the same way on the Client side. So what is really
happening in buildProtocol? Is it making a connection to the Client
side, and firing connectionMade(), no matter what? Or is something
else going that I don't understand :)
Thanks in advance for any clarification.
John C>
More information about the Twisted-Python
mailing list