import json from asgiref.sync import async_to_sync from channels.generic.websocket import WebsocketConsumer from django.contrib.auth.models import User from muzak.auth import get_user_from_token from channels.db import database_sync_to_async class SessionConsumer(WebsocketConsumer): def connect(self): self.session_id = self.scope["url_route"]["kwargs"]["session_id"] self.session_name = f"session_{self.session_id}" # print("---") # print(self.scope) # Join room group async_to_sync(self.channel_layer.group_add)( self.session_name, self.channel_name ) self.accept() def disconnect(self, close_code): # Leave room group async_to_sync(self.channel_layer.group_discard)( self.session_name, self.channel_name ) # Receive message from WebSocket def receive(self, text_data): user = self.scope["user"] text_data_json = json.loads(text_data) action = text_data_json["action"] # Niet lachen, middleware is moeilijk oké? username = text_data_json.get("username") token = text_data_json.get("token") if token: user = get_user_from_token(token, log=True) print(user) elif username: pass #user = User.objects.get(username=username) if action == "message": message = text_data_json["message"] # Send message to room group async_to_sync(self.channel_layer.group_send)( self.session_name, {"type": "chat.message", "message": str(user) + ": " + message} ) if action == "login": print("LOGIN", str(user)) async_to_sync(self.channel_layer.group_send)( self.session_name, {"type": "announce", "user": str(user)} ) def announce(self, event): user = event["user"] self.send(text_data=json.dumps({"joined": user})) # Receive message from room group def chat_message(self, event): message = event["message"] print(self.scope["user"]) # Send message to WebSocket self.send(text_data=json.dumps({"message": message}))