~divmod-dev/divmod.org/trunk

« back to all changes in this revision

Viewing changes to Epsilon/doc/listings/amp/route_client.py

  • Committer: Jean-Paul Calderone
  • Date: 2014-06-29 20:33:04 UTC
  • mfrom: (2749.1.1 remove-epsilon-1325289)
  • Revision ID: exarkun@twistedmatrix.com-20140629203304-gdkmbwl1suei4m97
mergeĀ lp:~exarkun/divmod.org/remove-epsilon-1325289

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (c) 2008 Divmod.  See LICENSE for details.
2
 
 
3
 
import random
4
 
 
5
 
from twisted.internet.defer import Deferred, gatherResults
6
 
from twisted.internet.protocol import ClientCreator
7
 
from twisted.protocols.amp import AMP
8
 
 
9
 
from epsilon.react import react
10
 
from epsilon.amprouter import Router
11
 
 
12
 
from route_setup import connect
13
 
from route_server import Count
14
 
 
15
 
 
16
 
def display(value, id):
17
 
    print id, value
18
 
 
19
 
 
20
 
class CountClient(AMP):
21
 
    def __init__(self, identifier):
22
 
        AMP.__init__(self)
23
 
        self.identifier = identifier
24
 
        self.finished = Deferred()
25
 
 
26
 
    def startReceivingBoxes(self, sender):
27
 
        AMP.startReceivingBoxes(self, sender)
28
 
 
29
 
        counts = []
30
 
        for i in range(random.randrange(1, 5)):
31
 
            d = self.callRemote(Count)
32
 
            d.addCallback(display, self.identifier)
33
 
            counts.append(d)
34
 
        gatherResults(counts).chainDeferred(self.finished)
35
 
 
36
 
 
37
 
 
38
 
def makeRoutes(proto, router):
39
 
    router.bindRoute(proto, None).connectTo(None)
40
 
 
41
 
    finish = []
42
 
    for i in range(3):
43
 
        client = CountClient(i)
44
 
        finish.append(connect(proto, router, client))
45
 
        finish.append(client.finished)
46
 
    return gatherResults(finish)
47
 
 
48
 
 
49
 
 
50
 
def main(reactor):
51
 
    router = Router()
52
 
    cc = ClientCreator(reactor, AMP, router)
53
 
    d = cc.connectTCP('localhost', 7805)
54
 
    d.addCallback(makeRoutes, router)
55
 
    return d
56
 
 
57
 
 
58
 
if __name__ == '__main__':
59
 
    from twisted.internet import reactor
60
 
    react(reactor, main, [])