So I can do the following but the onDisconnect and onConnect functions don&#39;t receive the broker - odd design decision?<div><br></div><div>Also, there&#39;s a comment in PBServerFactory.clientConnectionMade --&gt; &quot;# XXX does this method make any sense?&quot;.  Weird.<br>
<div><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">class MyServerObject(pb.Root):</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    def __init__(self):</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        pass</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    def onConnect(self):</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        log.msg(&quot;MyServerObject::onConnect&quot;)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    def onDisconnect(self):</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        log.msg(&quot;MyServerObject::onDisconnect&quot;)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">class MyServerFactory(pb.PBServerFactory):</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    def buildProtocol(self, addr):</font></div><div>
<font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        s = addr.host + &quot;:&quot; + str(addr.port)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        log.msg(&quot;MyServerFactory::buildProtocol - building protocol for &quot; + s)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        broker = pb.PBServerFactory.buildProtocol(self, addr)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        broker.notifyOnDisconnect(self.root.onDisconnect)</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        broker.notifyOnConnect(self.root.onConnect)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">        return broker</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">reactor.listenTCP(9999, MyServerFactory(MyServerObject()))</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">reactor.run()</font></div><div><br><div class="gmail_quote">On Thu, Apr 2, 2009 at 8:02 AM, Mike Stoddart <span dir="ltr">&lt;<a href="mailto:stodge@gmail.com">stodge@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I&#39;m experimenting with Twisted Spread for a registry server, among other things. I&#39;m just curious how the onDisconnect function knows which client disconnected? I&#39;m also curious why the PBServerFactory class doesn&#39;t have a disconnection function to complement clientConnectionMade? I don&#39;t need security - this is running on a closed, secure LAN and I don&#39;t need &quot;Avatars&quot;. Any suggestions on how to improve this?<div>

<br><div><br></div><div><div><font face="&#39;courier new&#39;, monospace">from twisted.internet import protocol, reactor</font></div><div><font face="&#39;courier new&#39;, monospace">from twisted.python import log</font></div>

<div><font face="&#39;courier new&#39;, monospace">from twisted.spread import pb</font></div><div><font face="&#39;courier new&#39;, monospace">import sys</font></div><div>
<font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">log.startLogging(sys.stdout)</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">class RegistryService(pb.Root):</font></div>
<div><font face="&#39;courier new&#39;, monospace">    def __init__(self):</font></div><div><font face="&#39;courier new&#39;, monospace">        self._clientCount = 0</font></div>
<div><font face="&#39;courier new&#39;, monospace">        self._clients = {}</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">    def remote_register(self, name, service):</font></div>

<div><font face="&#39;courier new&#39;, monospace">        log.msg(&quot;Registering service &quot; + name)</font></div><div><font face="&#39;courier new&#39;, monospace">        log.msg(str(service))</font></div>
<div><font face="&#39;courier new&#39;, monospace">        </font></div><div><font face="&#39;courier new&#39;, monospace">        # Welcome the client.</font></div><div><font face="&#39;courier new&#39;, monospace">        service.callRemote(&quot;welcome&quot;)</font></div>

<div><font face="&#39;courier new&#39;, monospace">        </font></div><div><font face="&#39;courier new&#39;, monospace">    def onDisconnect(self):</font></div><div><font face="&#39;courier new&#39;, monospace">        log.msg(&quot;onDisconnect&quot;)</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">        log.msg(&quot;Client count = &quot; + str(len(self._clients)))</font></div>
<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">    def onConnect(self, broker):       </font></div>
<div><font face="&#39;courier new&#39;, monospace">        s = broker.transport.getPeer().host + &quot;:&quot; + str(broker.transport.getPeer().port)</font></div><div><font face="&#39;courier new&#39;, monospace">        log.msg(&quot;onConnect - client at &quot; + s) </font></div>

<div><font face="&#39;courier new&#39;, monospace">        </font></div><div><font face="&#39;courier new&#39;, monospace">        # Add the client.</font></div><div><font face="&#39;courier new&#39;, monospace">        self._clients[s] = broker.transport</font></div>

<div><font face="&#39;courier new&#39;, monospace">        log.msg(&quot;Client count = &quot; + str(len(self._clients)))</font></div><div><font face="&#39;courier new&#39;, monospace">        </font></div>
<div><font face="&#39;courier new&#39;, monospace">        # Set a callback in case they disconnect.</font></div><div><font face="&#39;courier new&#39;, monospace">        broker.notifyOnDisconnect(self.onDisconnect)</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">class MyPBFactory(pb.PBServerFactory):</font></div><div>
<font face="&#39;courier new&#39;, monospace">    def __init__(self, root):</font></div><div><font face="&#39;courier new&#39;, monospace">        pb.PBServerFactory.__init__(self, root)</font></div>
<div><font face="&#39;courier new&#39;, monospace">               </font></div><div><font face="&#39;courier new&#39;, monospace">    def clientConnectionMade(self, broker):</font></div>
<div><font face="&#39;courier new&#39;, monospace">        log.msg(&quot;clientConnectionMade&quot;)</font></div><div><font face="&#39;courier new&#39;, monospace">        self.root.onConnect(broker)      </font></div>
<div><font face="&#39;courier new&#39;, monospace">        </font></div><div><font face="&#39;courier new&#39;, monospace">registry = RegistryService()</font></div><div><font face="&#39;courier new&#39;, monospace">f = MyPBFactory(RegistryService())</font></div>

<div><font face="&#39;courier new&#39;, monospace">reactor.listenTCP(9999, f)</font></div><div><font face="&#39;courier new&#39;, monospace">reactor.run()</font></div><div>
<br></div><div><br></div><div>Thanks</div><div>Mike</div></div></div>
</blockquote></div><br></div></div></div></div>