import injector import json from channels.generic.websocket import WebsocketConsumer class DashboardConnectionManager: def __init__(self): self._clients = [] def register(self, client: WebsocketConsumer): self._clients.append(client) pass def unregister(self, client: WebsocketConsumer): self._clients.remove(client) def broadcast(self, message: any): for client in self._clients: client.push(message) class DashboardConsumer(WebsocketConsumer): @injector.inject def __init__(self, manager: DashboardConnectionManager, *args, **kwargs): super().__init__(*args, **kwargs) self._manager = manager def connect(self): self.accept() self._manager.register(self) def disconnect(self, close_code): self._manager.unregister(self) def receive(self, text_data=None, bytes_data=None): # text_data_json = json.loads(text_data) # message = text_data_json['message'] # self.send(text_data=json.dumps({ # 'message': message # })) pass # do nothing currently def push(self, message): self.send(text_data=json.dumps(message))