|
1 from twisted.protocols import amp |
|
2 |
|
3 from fixbot.module import ModuleInfo, Event |
|
4 |
|
5 class CmdModuleRegister (amp.Command) : |
|
6 """ |
|
7 Register module |
|
8 """ |
|
9 |
|
10 arguments = [ |
|
11 ('name', amp.String()), |
|
12 ] |
|
13 |
|
14 class CmdModuleEvent (amp.Command) : |
|
15 """ |
|
16 Broadcast event |
|
17 """ |
|
18 |
|
19 arguments = [ |
|
20 ('type', amp.String()), |
|
21 ('msg', amp.String()), |
|
22 ] |
|
23 |
|
24 class ServerProtocol (amp.AMP) : |
|
25 """ |
|
26 Nexus-side command handler |
|
27 """ |
|
28 |
|
29 # the registered ModuleInfo |
|
30 module = None |
|
31 |
|
32 @CmdModuleRegister.responder |
|
33 def on_ModuleRegister (self, name) : |
|
34 # construct the ModuleInfo |
|
35 mi = ModuleInfo() |
|
36 mi.name = name |
|
37 |
|
38 # register |
|
39 self.factory.nexus.registerModule(mi, self) |
|
40 self.module = mi |
|
41 |
|
42 # ok |
|
43 return {} |
|
44 |
|
45 @CmdModuleEvent.responder |
|
46 def on_ModuleEvent (self, type, msg) : |
|
47 # as Event |
|
48 e = Event(self.module, type, msg) |
|
49 |
|
50 # publish |
|
51 self.factory.nexus.handleEvent(e) |
|
52 |
|
53 # ok |
|
54 return {} |
|
55 |
|
56 |
|
57 class ClientProtocol (amp.AMP) : |
|
58 """ |
|
59 Module-side command sender/handler |
|
60 """ |
|
61 |
|
62 |
|
63 def connectionMade (self) : |
|
64 """ |
|
65 Connected to nexus, send ModuleRegister |
|
66 """ |
|
67 |
|
68 # register |
|
69 self.sendModuleRegister(self.factory.name).addCallback(self._ModuleRegisterOK) |
|
70 |
|
71 |
|
72 def sendModuleRegister (self, name) : |
|
73 """ |
|
74 Register with given module name |
|
75 """ |
|
76 |
|
77 return self.callRemote(CmdModuleRegister, name=name) |
|
78 |
|
79 |
|
80 def _ModuleRegisterOK (self, ret) : |
|
81 """ |
|
82 Registered with nexus, commence operation |
|
83 """ |
|
84 |
|
85 self.factory._onRegistered(self) |
|
86 |
|
87 |
|
88 def sendEvent (self, event) : |
|
89 """ |
|
90 Broadcast event to nexus |
|
91 """ |
|
92 |
|
93 self.callRemote(CmdModuleEvent, type=event.type, msg=event.msg) |
|
94 |
|
95 |