45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
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))
|