Shuvit game master repo. http://shuvit.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

observer.py 872B

12345678910111213141516171819202122
  1. class Subscriber:
  2. def __init__(self, name):
  3. self.name = name
  4. def update(self, message):
  5. print('{} got message "{}"'.format(self.name, message))
  6. class Publisher:
  7. def __init__(self, events):
  8. self.subscribers = { event : dict()
  9. for event in events }
  10. def get_subscribers(self, event):
  11. return self.subscribers[event]
  12. def register(self, event, who, callback=None):
  13. if callback is None:
  14. callback = getattr(who, 'ReceiveMessage')
  15. self.get_subscribers(event)[who] = callback
  16. def unregister(self, event, who):
  17. del self.get_subscribers(event)[who]
  18. def dispatch(self, event, message):
  19. for subscriber, callback in self.get_subscribers(event).items():
  20. callback(message)