Skip to content

Instantly share code, notes, and snippets.

@pjz
Last active March 10, 2016 16:30
Show Gist options
  • Save pjz/e18cc87a54a21802916e to your computer and use it in GitHub Desktop.
Save pjz/e18cc87a54a21802916e to your computer and use it in GitHub Desktop.
ActorHandler helper module
"""
ActorHandler - class-based dispatch for actors
Usage:
from thespian.actors import Actor
handler = ActorHandler()
class Hello(Actor):
@handler.handle(SomeMessageClass)
def do_someclass(self, message, sender):
pass
receiveMessage = handler.receiveMessage()
"""
REGISTRY = {}
class ActorHandler(object):
def __init__(self):
REGISTRY[self] = {}
pass
def handle(self, klass):
def klass_decorator(func):
REGISTRY[self][klass] = func
return func
return klass_decorator
def receiveMessage(self):
registry = REGISTRY[self]
def receiveMessage(self, message, sender):
k = message.__class__
if not k in registry:
for klass in registry:
if isinstance(message, klass):
registry[message.__class__] = registry[klass]
break
method = registry.get(klass, None)
if method is not None:
method(self, message, sender)
else:
self.unhandledMessage(message, sender)
return receiveMessage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment