equal
deleted
inserted
replaced
12 """ |
12 """ |
13 |
13 |
14 # module's name |
14 # module's name |
15 name = None |
15 name = None |
16 |
16 |
17 # list of valid event types (strings) |
|
18 event_types = None |
|
19 |
|
20 def __str__ (self) : |
17 def __str__ (self) : |
21 return "Module %s:" % (self.name) |
18 return "Module %s:" % (self.name) |
22 |
19 |
23 def __repr__ (self) : |
20 def __repr__ (self) : |
24 return "<module %s with events: %s>" % (self.name, ", ".join(self.event_types)) |
21 return "<module %s>" % (self.name, ) |
25 |
22 |
26 class Event (object) : |
23 class Event (object) : |
27 # the ModuleInfo object |
24 # the ModuleInfo object |
28 module = None |
25 module = None |
29 |
26 |
30 # the event type as a string |
27 # the event type as a string |
31 type = None |
28 type = None |
32 |
29 |
33 # event message as a string (under 255 bytes in length!) |
30 # event message as a string (up to 64k, although that won't fit onto IRC..) |
34 msg = None |
31 msg = None |
35 |
32 |
36 # timestamp as a datetime.datetime |
33 # timestamp as a datetime.datetime |
37 when = None |
34 when = None |
38 |
35 |
39 def __init__ (self, module, type, msg) : |
36 def __init__ (self, module, type, msg) : |
40 assert type in module.event_types, "Invalid event-type %s for %r" % (type, self.module) |
|
41 |
|
42 self.module = module |
37 self.module = module |
43 self.type = type |
38 self.type = type |
44 self.msg = msg |
39 self.msg = msg |
45 |
40 |
46 self.when = datetime.now() |
41 self.when = datetime.now() |
97 self._assert(peer_secret == self.factory.secret, "Mismatching API secrets!") |
92 self._assert(peer_secret == self.factory.secret, "Mismatching API secrets!") |
98 |
93 |
99 m = ModuleInfo() |
94 m = ModuleInfo() |
100 |
95 |
101 m.name = i.readVarLen('B') |
96 m.name = i.readVarLen('B') |
102 m.event_types = list(buffer.readStringStream(i, 'B')) |
|
103 m.addr = self.transport.getPeer() |
97 m.addr = self.transport.getPeer() |
104 |
98 |
105 log.msg("Got mod_init for %r" % m) |
99 log.msg("Got mod_init for %r" % m) |
106 |
100 |
107 self.factory.nexus.registerModule(m, self) |
101 self.factory.nexus.registerModule(m, self) |
113 self.send(o) |
107 self.send(o) |
114 |
108 |
115 def on_module_event (self, i) : |
109 def on_module_event (self, i) : |
116 self._assert(self.module, "module_event with None self.module!") |
110 self._assert(self.module, "module_event with None self.module!") |
117 |
111 |
118 event_type = i.readEnum(self.module.event_types) |
112 event_type = i.readVarLen('B') |
119 event_msg = i.readVarLen('H') |
113 event_msg = i.readVarLen('H') |
120 |
114 |
121 e = Event(self.module, event_type, event_msg) |
115 e = Event(self.module, event_type, event_msg) |
122 |
116 |
123 self.factory.nexus.handleEvent(e) |
117 self.factory.nexus.handleEvent(e) |
136 log.msg("Connected to API server, sending module init message") |
130 log.msg("Connected to API server, sending module init message") |
137 |
131 |
138 o = self.startCommand('module_init') |
132 o = self.startCommand('module_init') |
139 o.writeVarLen('B', self.factory.secret) |
133 o.writeVarLen('B', self.factory.secret) |
140 o.writeVarLen('B', self.factory.name) |
134 o.writeVarLen('B', self.factory.name) |
141 buffer.writeStringStream(o, 'B', self.factory.event_types) |
|
142 |
135 |
143 self.send(o) |
136 self.send(o) |
144 |
137 |
145 def sendEvent (self, event) : |
138 def sendEvent (self, event) : |
146 o = self.startCommand('module_event') |
139 o = self.startCommand('module_event') |
147 o.writeEnum(self.factory.event_types, event.type) |
140 o.writeVarLen('B', event.type) |
148 o.writeVarLen('H', event.msg[:2**16]) |
141 o.writeVarLen('H', event.msg[:2**16]) |
149 |
142 |
150 self.send(o) |
143 self.send(o) |
151 |
144 |
152 def on_module_ok (self, i) : |
145 def on_module_ok (self, i) : |