From 5e9eb88bfcb0686f0b50ac77a36e495c66ab60a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Mon, 26 Feb 2018 14:26:14 +0100 Subject: [PATCH] =?UTF-8?q?Implement=20crude=20FSMManager=20=E2=80=93=20wi?= =?UTF-8?q?p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tfw/networking/server/tfw_server.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/tfw/networking/server/tfw_server.py b/lib/tfw/networking/server/tfw_server.py index 8411bd4..2644ad1 100644 --- a/lib/tfw/networking/server/tfw_server.py +++ b/lib/tfw/networking/server/tfw_server.py @@ -36,6 +36,30 @@ class TFWServer: self.application.listen(port) +class FSMManager: + def __init__(self, fsm_type): + self.fsm = fsm_type() + self.trigger_handlers = {} + + def trigger(self, trigger): + self._prepare_handlerlist(trigger) + if all((handler() for handler in self.trigger_handlers[trigger])): + try: self.fsm.trigger(trigger, message='') + except AttributeError: log.debug('FSM failed to execute nonexistent trigger: "{}"'.format(trigger)) + + def subscribe_handler(self, trigger, handler): + self._prepare_handlerlist(trigger) + self.trigger_handlers[trigger].append(handler) + + def unsubscribe_handler(self, trigger, handler): + self._prepare_handlerlist(trigger) + self.trigger_handlers[trigger].append(handler) + + def _prepare_handlerlist(self, trigger): + try: self.trigger_handlers[trigger] + except KeyError: self.trigger_handlers[trigger] = [] + + class FSMUpdater: def __init__(self, fsm): self.fsm = fsm