From: Benjamin Braatz Date: Fri, 5 Mar 2021 09:34:50 +0000 (+0100) Subject: Send iface at register, 'bus event' to 'event' X-Git-Tag: v0.3.0~75 X-Git-Url: http://git.graph-it.com/?a=commitdiff_plain;h=27f89d03b79903e384507df6c2cbdc670329842f;p=graphit%2Fcontrolpi.git Send iface at register, 'bus event' to 'event' --- diff --git a/controlpi/__init__.py b/controlpi/__init__.py index 176a1c0..b472781 100644 --- a/controlpi/__init__.py +++ b/controlpi/__init__.py @@ -71,8 +71,10 @@ client and its registered send and receive templates: ... bus_task.cancel() >>> asyncio.run(test_bus()) BusPlugin 'Bus Test' configured. -Log: {'sender': '', 'bus event': 'registered', 'client': 'Bus Test'} -Log: {'sender': '', 'bus event': 'registered', 'client': 'Test'} +Log: {'sender': '', 'event': 'registered', 'client': 'Bus Test', \ +'sends': [{'event': ""}], 'receives': [{'target': 'Bus Test'}]} +Log: {'sender': '', 'event': 'registered', 'client': 'Test', \ +'sends': [{}], 'receives': [{}]} Log: {'sender': 'Test', 'target': '', 'command': 'get clients'} Log: {'sender': '', 'client': 'Bus Test', \ 'sends': [{'event': ""}], 'receives': [{'target': 'Bus Test'}]} diff --git a/controlpi/messagebus.py b/controlpi/messagebus.py index d2853a3..52ec624 100644 --- a/controlpi/messagebus.py +++ b/controlpi/messagebus.py @@ -65,8 +65,10 @@ have to explicitly cancel the task: Sending messages. Message not allowed for sender Client 1! {'sender': 'Client 1', 'k1': 42} -Logger: {'sender': '', 'bus event': 'registered', 'client': 'Logger'} -Logger: {'sender': '', 'bus event': 'registered', 'client': 'Client 1'} +Logger: {'sender': '', 'event': 'registered', 'client': 'Logger', \ +'sends': [], 'receives': [{}]} +Logger: {'sender': '', 'event': 'registered', 'client': 'Client 1', \ +'sends': [{'k1': ""}], 'receives': [{'target': 'Client 1'}]} Logger: {'sender': 'Client 1', 'k1': 'Test'} Logger: {'sender': '', 'target': 'Client 1'} Client 1: {'sender': '', 'target': 'Client 1'} @@ -461,9 +463,9 @@ class MessageBus: ... callback_for_receiver('Client 2')) The bus itself is addressed by the empty string. It sends messages for - each registration and deregestration of a client with a key 'bus event' - and a value of 'registered' or 'unregistered', and a key 'client' with - the client's name as value. + each registration and deregestration of a client with a key 'event' and + a value of 'registered' or 'unregistered', and a key 'client' with the + client's name as value. Clients can send to the bus with the send function. Each message has to declare a sender. The send templates of that sender are checked for a @@ -511,9 +513,12 @@ class MessageBus: {'sender': 'Client 1', 'k1': 42} Message not allowed for sender Client 1! {'sender': 'Client 1', 'k2': 42} - Logger: {'sender': '', 'bus event': 'registered', 'client': 'Logger'} - Logger: {'sender': '', 'bus event': 'registered', 'client': 'Client 1'} - Logger: {'sender': '', 'bus event': 'registered', 'client': 'Client 2'} + Logger: {'sender': '', 'event': 'registered', 'client': 'Logger', \ +'sends': [], 'receives': [{}]} + Logger: {'sender': '', 'event': 'registered', 'client': 'Client 1', \ +'sends': [{'k1': ""}], 'receives': [{'target': 'Client 1'}]} + Logger: {'sender': '', 'event': 'registered', 'client': 'Client 2', \ +'sends': [{}], 'receives': [{'target': 'Client 2'}]} Logger: {'sender': 'Client 1', 'k1': 'Test'} Logger: {'sender': 'Client 2', 'target': 'Client 1'} Client 1: {'sender': 'Client 2', 'target': 'Client 1'} @@ -538,7 +543,7 @@ class MessageBus: self._recv_reg: MessageTemplateRegistry = MessageTemplateRegistry() self._callbacks: dict[str, MessageCallback] = {} - def register(self, name: str, + def register(self, client: str, sends: Iterable[Message], receives: Iterable[Message], callback: MessageCallback) -> None: @@ -565,19 +570,21 @@ class MessageBus: ... callback) >>> asyncio.run(main()) """ - if name in self._callbacks: - print(f"Client '{name}' already registered at message bus!") + if client in self._callbacks: + print(f"Client '{client}' already registered at message bus!") return for template in sends: - self._send_reg.insert(template, name) + self._send_reg.insert(template, client) + sends = self._send_reg.get_templates(client) for template in receives: - self._recv_reg.insert(template, name) - self._callbacks[name] = callback - self._queue.put_nowait({'sender': '', - 'bus event': 'registered', - 'client': name}) - - def unregister(self, name: str) -> None: + self._recv_reg.insert(template, client) + receives = self._recv_reg.get_templates(client) + self._callbacks[client] = callback + event = {'sender': '', 'event': 'registered', 'client': client, + 'sends': sends, 'receives': receives} + self._queue.put_nowait(event) + + def unregister(self, client: str) -> None: """Unregister a client from the message bus. >>> async def callback(message): @@ -589,13 +596,12 @@ class MessageBus: ... bus.unregister('Client 1') >>> asyncio.run(main()) """ - self._send_reg.delete(name) - self._recv_reg.delete(name) - if name in self._callbacks: - del self._callbacks[name] - self._queue.put_nowait({'sender': '', - 'bus event': 'unregistered', - 'client': name}) + self._send_reg.delete(client) + self._recv_reg.delete(client) + if client in self._callbacks: + del self._callbacks[client] + event = {'sender': '', 'event': 'unregistered', 'client': client} + self._queue.put_nowait(event) async def run(self) -> None: """Run the message bus forever. diff --git a/doc/index.md b/doc/index.md index b0fe96f..2d95ac2 100644 --- a/doc/index.md +++ b/doc/index.md @@ -319,19 +319,48 @@ Haupt-Routinen, da ihr Verhalten nur als Reaktion auf empfangene Nachrichten stattfindet. ``` -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'Example State'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'WaitCheck'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerStateCheck'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerWaitCheck'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'WaitOn'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerStateOnOff'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerWaitOnOff'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'WaitOff'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerStateOffOn'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerWaitOffOn'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'Test Procedure'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'Debug Logger'} -Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'State Change Logger'} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'Example State', + 'sends': [{'sender': 'Example State', 'state': ""}], + 'receives': [{'target': 'Example State', 'command': 'get state'}, + {'target': 'Example State', 'command': 'set state', + 'state': ""}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'WaitCheck', + 'sends': [{'event': 'finished'}], + 'receives': [{'target': 'WaitCheck', 'command': 'wait'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerStateCheck', + 'sends': [{'target': 'Example State', 'command': 'get state'}], + 'receives': [{'sender': 'WaitCheck', 'event': 'finished'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerWaitCheck', + 'sends': [{'target': 'WaitCheck', 'command': 'wait'}], + 'receives': [{'sender': 'WaitCheck', 'event': 'finished'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'WaitOn', + 'sends': [{'event': 'finished'}], + 'receives': [{'target': 'WaitOn', 'command': 'wait'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerStateOnOff', + 'sends': [{'target': 'Example State', 'command': 'set state', 'state': False}], + 'receives': [{'sender': 'WaitOn', 'event': 'finished'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerWaitOnOff', + 'sends': [{'target': 'WaitOff', 'command': 'wait'}], + 'receives': [{'sender': 'WaitOn', 'event': 'finished'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'WaitOff', + 'sends': [{'event': 'finished'}], + 'receives': [{'target': 'WaitOff', 'command': 'wait'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerStateOffOn', + 'sends': [{'target': 'Example State', 'command': 'set state', 'state': True}], + 'receives': [{'sender': 'WaitOff', 'event': 'finished'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerWaitOffOn', + 'sends': [{'target': 'WaitOn', 'command': 'wait'}], + 'receives': [{'sender': 'WaitOff', 'event': 'finished'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'Test Procedure', + 'sends': [{'event': 'started'}, {'event': 'stopped'}, + {'target': 'WaitCheck', 'command': 'wait'}, + {'target': 'WaitOff', 'command': 'wait'}, + {'target': 'Test Procedure', 'command': 'execute'}], + 'receives': [{'target': 'Test Procedure', 'command': 'execute'}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'Debug Logger', + 'sends': [], 'receives': [{}]} +Debug Logger: {'sender': '', 'event': 'registered', 'client': 'State Change Logger', + 'sends': [], 'receives': [{'sender': 'Example State', 'changed': True}]} ``` Die Instanz `Debug Logger` zeigt uns alle im System verschickten Nachrichten an. Zunächst meldet der Nachrichten-Bus selbst alle