[Twisted-Python] Perspective Broker
le dahut
le.dahut at laposte.net
Tue Nov 28 09:57:01 EST 2006
Thanks, I didn't understand that Callbacks are "chainable" also between
the different PB actors.
It's a bit difficult to understand but once is done, it's a pleasure to
use :-) .
christian simms a écrit :
> On 11/27/06, le dahut <le.dahut at laposte.net> wrote:
>> Hello,
>>
>> Using PB, I've setup a system where clients can control other clients in
>> this way :
>>
>> client1 executes "remote_do_something" on server1 with "ip_client2" as
>> argument.
>> Then server1 connects to client2 and executes "remote_smthng" on it.
>
> I haven't used PB before, but I have used other protocols with
> Deferreds. Assuming your PB code is OK, you're only missing a couple
> lines related to callbacks, which I'll insert below.
>
>> code is like this :
>> - client1:
>> """
>> factory = pb.PBClientFactory()
>> reactor.connectTCP(ip_server1, port, factory)
>> d = factory.getRootObject()
>> d.addCallback(lambda object: object.callRemote("do_something",
>> ip_client2))
>> d.addCallback(client1_call_b)
>> d.addErrback(client1_err_b)
>
> Please note that above, your client1_call_b function will be called
> with its argument being the result of the remote method call
> "do_something".
>
>> """
>>
>> - server1:
>> """
>> def remote_do_something(ip):
>> factory = pb.PBClientFactory()
>> reactor.connectTCP(ip_client2, port, factory)
>> d = factory.getRootObject()
>> d.addCallback(lambda object: object.callRemote("smthng"))
>> d.addCallback(server1_call_b)
>> d.addErrback(server1_err_b)
>
> Above, you need to add a "return d" statement at the very end of your
> function "remote_do_something", or else Twisted won't know that the
> output of the function "remote_do_something" should be the end result
> of your Deferred "d". Also, your function "server1_call_b" MUST
> return its argument, or else the result will not get passed along. It
> could look something like this:
>
> def server1_call_b(out):
> return out
>
> The argument to server1_call_b is the result from the
> "object.callRemote('smthng')" statement, and we are simply returning
> it. In fact, if that's all the function did, you should not even
> define it (or use it in the callback chain) since it's not necessary.
> But if you forgot the return statement then you would get Python's
> default return value from a function, None, instead of the value.
>
>>
>> """
>>
>> - client2:
>> """
>> def remote_smthng():
>> <code>
>> return "Ok, everything's done"
>> """
>>
>> How can client1 get client2's answer ?
>>
>> Thanks
>
> Hopefully that does it.
>
> Cheers,
> Christian
>
>
>>
>> _______________________________________________
>> Twisted-Python mailing list
>> Twisted-Python at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
More information about the Twisted-Python
mailing list