raspberry pi zero based drum machine
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 948B

123456789101112131415161718192021222324
  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. pass
  7. class Publisher:
  8. def __init__(self, events):
  9. self.subscribers = { event : dict()
  10. for event in events }
  11. def get_subscribers(self, event):
  12. return self.subscribers[event]
  13. def register(self, event, who, callback=None):
  14. if callback is None:
  15. callback = getattr(who, 'ReceiveMessage')
  16. self.get_subscribers(event)[who] = callback
  17. def unregister(self, event, who):
  18. del self.get_subscribers(event)[who]
  19. def dispatch(self, event, message):
  20. #print('dispatch', self.get_subscribers(event).items())
  21. for subscriber, callback in self.get_subscribers(event).items():
  22. callback(message)