1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class Publisher(object):
def __init__(self):
self.subscribers = []
def subscribe(self, who):
if who not in self.subscribers:
self.subscribers.append(who)
def unsubscribe(self, who):
if who in self.subscribers:
self.subscribers.remove(who)
def request_all(self, message, *args):
ret = []
for subscriber in self.subscribers:
method = "request_" + message
if hasattr(subscriber, method):
ret.append(getattr(subscriber, method)(*args))
return ret
def request_one(self, message, *args):
for subscriber in self.subscribers:
method = "request_" + message
if hasattr(subscriber, method):
return getattr(subscriber, method)(*args)
def notify(self, message, *args):
for subscriber in self.subscribers:
method = "msg_" + message
if hasattr(subscriber, method):
getattr(subscriber, method)(*args)
|