Thanks, Lucas.  I spent several hours struggling with this.  The source code DOES make it very obvious.  :-)  I hadn't realized from the buildProtocol API documentation that it assigned the factory attribute to the protocol instance.  It's so obvious now... :-)

And, now, I understand the "magic" of assigning the protocol to a factory which I did not before.

It runs fine!

Mark

On Fri, Feb 5, 2010 at 8:04 PM, Lucas Taylor <ltaylor.volks@gmail.com> wrote:
On 2/5/10 5:23 PM, Mark Bailey wrote:

Hi Mark,

The problem is that you have overridden buildProtocol in your Factory
and not set the factory attribute on the protocol instance
(ClusterClient instance has no attribute 'factory').

buildProtocol is responsible for creating the protocol instance and the
default implementation takes care of assigning the factory to the protocol.

see the source for Factory and buildProtocol...it's very concise:

http://twistedmatrix.com/trac/browser/tags/releases/twisted-9.0.0/twisted/internet/protocol.py#L87
http://twistedmatrix.com/documents/9.0.0/api/twisted.internet.protocol.Factory.html#buildProtocol


So something like this should work in your case:

   def buildProtocol(self, addr):
       print 'Connected.'
       self.resetDelay()
       p = self.protocol()
       p.factory = self
       return p


This doc is also helpful for understanding the relationship between
Protocols and Factories:
http://twistedmatrix.com/documents/current/core/howto/servers.html

It may be worth emphasizing that there's no real magic going on
here...you're just assigning a python object as an attribute of the
protocol instance.


Lucas


_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python