Prevent message loop.
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 16 Jun 2021 09:47:27 +0000 (11:47 +0200)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 16 Jun 2021 09:47:27 +0000 (11:47 +0200)
controlpi_plugins/wsclient.py

index f080a784785345b732953351a05634bf889d0943..e14be7b5aa6adfbdbc920628b78426b3cf3005cd 100644 (file)
@@ -29,8 +29,11 @@ class WSClient(BasePlugin):
         if not self._websocket:
             return
         assert isinstance(message['sender'], str)
+        prefix = f"{self.name}/"
         original_sender = self.conf['client']
         if 'original sender' in message:
+            if message['original sender'].startswith(prefix):
+                return
             original_sender += f"/{message['original sender']}"
         else:
             original_sender += f"/{message['sender']}"
@@ -39,7 +42,6 @@ class WSClient(BasePlugin):
         if 'target' in message:
             assert isinstance(message['target'], str)
             target = message['target']
-            prefix = f"{self.name}/"
             if target.startswith(prefix):
                 target = target[len(prefix):]
             else:
@@ -50,8 +52,11 @@ class WSClient(BasePlugin):
 
     async def _send(self, json_message: str) -> None:
         message = json.loads(json_message)
+        prefix = f"{self.conf['client']}/"
         original_sender = self.name
         if 'original sender' in message:
+            if message['original sender'].startswith(prefix):
+                return
             original_sender += f"/{message['original sender']}"
         else:
             original_sender += f"/{message['sender']}"
@@ -59,7 +64,6 @@ class WSClient(BasePlugin):
         message['sender'] = self.name
         if 'target' in message:
             target = message['target']
-            prefix = f"{self.conf['client']}/"
             if target.startswith(prefix):
                 target = target[len(prefix):]
             else: