-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathobserver3.py
More file actions
24 lines (22 loc) · 862 Bytes
/
observer3.py
File metadata and controls
24 lines (22 loc) · 862 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Subscriber:
def __init__(self, name):
self.name = name
def update(self, message):
print('{} got message "{}"'.format(self.name, message))
class Publisher:
def __init__(self, events):
# maps event names to subscribers
# str -> dict
self.events = { event : dict()
for event in events }
def get_subscribers(self, event):
return self.events[event]
def register(self, event, who, callback=None):
if callback == None:
callback = getattr(who, 'update')
self.get_subscribers(event)[who] = callback
def unregister(self, event, who):
del self.get_subscribers(event)[who]
def dispatch(self, event, message):
for subscriber, callback in self.get_subscribers(event).items():
callback(message)