Catch BusException and unregister.
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 11 Aug 2021 08:03:12 +0000 (10:03 +0200)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 11 Aug 2021 08:03:12 +0000 (10:03 +0200)
controlpi_plugins/wsserver.py

index 0ede4434abfc02ac62d968cb2e5c011822ba9da6..b72cb3ec124887c26ca1a8b83e6a35b0b7e3ad9e 100644 (file)
@@ -8,7 +8,8 @@ from websockets.datastructures import Headers
 from websockets.exceptions import ConnectionClosed
 from websockets.legacy.server import serve, WebSocketServerProtocol
 
-from controlpi import BasePlugin, MessageBus, Message, MessageTemplate
+from controlpi import (BasePlugin, MessageBus, BusException,
+                       Message, MessageTemplate)
 
 from typing import Optional, Tuple
 
@@ -72,8 +73,15 @@ class Connection:
                                                    'connection closed'}}))
                     for template in message['up filter']:
                         sends.append(template)
-                    self._bus.register(self._name, 'WSServer', sends,
-                                       message['down filter'], self._receive)
+                    try:
+                        self._bus.register(self._name, 'WSServer', sends,
+                                           message['down filter'],
+                                           self._receive)
+                    except BusException:
+                        self._bus.unregister(self._name)
+                        self._bus.register(self._name, 'WSServer', sends,
+                                           message['down filter'],
+                                           self._receive)
                     open_message = Message(self._name)
                     open_message['event'] = 'connection opened'
                     open_message['address'] = self._address