From: Benjamin Braatz Date: Tue, 14 Dec 2021 22:54:02 +0000 (+0100) Subject: Use new-style register. X-Git-Url: http://git.graph-it.com/?a=commitdiff_plain;h=ecb6c166925a5219fe4f0eb575fc1842cff6b8b9;p=graphit%2Fcontrolpi-statemachine.git Use new-style register. --- diff --git a/controlpi_plugins/statemachine.py b/controlpi_plugins/statemachine.py index 6f47d8c..3415f41 100644 --- a/controlpi_plugins/statemachine.py +++ b/controlpi_plugins/statemachine.py @@ -58,14 +58,7 @@ class StateMachine(BasePlugin): 'required': ['commands', 'transitions']}}, 'additionalProperties': False}})) - receives = [] - receives.append(MessageTemplate({'target': {'const': self.name}, - 'command': {'const': 'get state'}})) - receives.append(MessageTemplate({'target': {'const': self.name}, - 'command': {'const': 'get machine'}})) - receives.append(MessageTemplate({'target': {'const': self.name}, - 'command': {'const': 'set state'}, - 'new state': {'type': 'string'}})) + triggers = [] for state in self.conf['states']: commands = self.conf['states'][state]['commands'] for command in commands: @@ -75,34 +68,51 @@ class StateMachine(BasePlugin): transitions = self.conf['states'][state]['transitions'] for transition in transitions: template = MessageTemplate(transition['trigger']) - if template not in receives: - receives.append(template) - self.bus.register(self.name, 'StateMachine', - sends, receives, self._receive) + if template not in triggers: + triggers.append(template) + self.bus.register(self.name, 'StateMachine', sends, + [([MessageTemplate({'target': + {'const': self.name}, + 'command': + {'const': 'get state'}})], + self._get_state), + ([MessageTemplate({'target': + {'const': self.name}, + 'command': + {'const': 'get machine'}})], + self._get_machine), + ([MessageTemplate({'target': + {'const': self.name}, + 'command': + {'const': 'set state'}, + 'new state': + {'type': 'string'}})], + self._set_state), + (triggers, self._trigger)]) - async def _receive(self, message: Message) -> None: - if ('target' in message and message['target'] == self.name and - 'command' in message): - if message['command'] == 'get state': - await self.bus.send(Message(self.name, - {'state': self._current_state})) - if message['command'] == 'get machine': - await self.bus.send(Message(self.name, - {'init': self.conf['init'], - 'states': self.conf['states']})) - if (message['command'] == 'set state' and - 'new state' in message and - message['new state'] != self._current_state and - message['new state'] in self.conf['states']): - assert isinstance(message['new state'], str) - new_state = message['new state'] - self._current_state = new_state - await self.bus.send(Message(self.name, - {'event': 'changed', - 'state': new_state})) - commands = self.conf['states'][new_state]['commands'] - for command in commands: - await self.bus.send(Message(self.name, command)) + async def _get_state(self, message: Message) -> None: + await self.bus.send(Message(self.name, + {'state': self._current_state})) + + async def _get_machine(self, message: Message) -> None: + await self.bus.send(Message(self.name, + {'init': self.conf['init'], + 'states': self.conf['states']})) + + async def _set_state(self, message: Message) -> None: + if (message['new state'] != self._current_state and + message['new state'] in self.conf['states']): + assert isinstance(message['new state'], str) + new_state = message['new state'] + self._current_state = new_state + await self.bus.send(Message(self.name, + {'event': 'changed', + 'state': new_state})) + commands = self.conf['states'][new_state]['commands'] + for command in commands: + await self.bus.send(Message(self.name, command)) + + async def _trigger(self, message: Message) -> None: transitions = self.conf['states'][self._current_state]['transitions'] for transition in transitions: if (MessageTemplate(transition['trigger']).check(message) and