[MessageTemplate()],
[([MessageTemplate()],
self._receive)])
+ self._registered = True
async def _receive(self, message: Message) -> None:
"""Receive messages from bus and relay to websocket."""
message['command'] == 'configure websocket' and
'target' in message and
message['target'] == ''):
- await self._bus.send(Message(self._name,
- {'event':
- 'connection closed'}))
+ self._registered = False
self._bus.unregister(self._name)
+ new_name = self._name
if 'name' in message:
- self._name = message['name']
+ new_name = message['name']
sends = []
sends.append(MessageTemplate({'event':
{'const':
'connection opened'}}))
+ sends.append(MessageTemplate({'event':
+ {'const':
+ 'connection configured'}}))
sends.append(MessageTemplate({'event':
{'const':
'connection closed'}}))
for template in message['up filter']:
sends.append(template)
try:
- self._bus.register(self._name, 'WSServer', sends,
+ self._bus.register(new_name, 'WSServer', sends,
[(message['down filter'],
self._receive)])
+ self._registered = True
+ self._name = new_name
+ configure_message = Message(self._name)
+ configure_message['event'] = 'connection configured'
+ configure_message['address'] = self._address
+ configure_message['port'] = self._port
+ if 'mac' in message:
+ configure_message['mac'] = message['mac']
+ await self._bus.send(configure_message)
except BusException as e:
- print(f"Unable to register client '{self._name}'"
+ print(f"Unable to register client '{new_name}'"
f"on bus: {e}")
- open_message = Message(self._name)
- open_message['event'] = 'connection opened'
- open_message['address'] = self._address
- open_message['port'] = self._port
- if 'mac' in message:
- open_message['mac'] = message['mac']
- await self._bus.send(open_message)
+ await self._websocket.close()
else:
- await self._bus.send(Message(self._name, message))
+ if self._registered:
+ await self._bus.send(Message(self._name, message))
except ConnectionClosed:
pass
- await self._bus.send(Message(self._name,
- {'event': 'connection closed'}))
+ if self._registered:
+ await self._bus.send(Message(self._name,
+ {'event': 'connection closed'}))
+ self._registered = False
self._bus.unregister(self._name)