sessions, or something

This commit is contained in:
2025-08-09 16:28:49 +02:00
parent 4c70a3f72d
commit 21d5f56a39
30 changed files with 683 additions and 38 deletions
+71
View File
@@ -0,0 +1,71 @@
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}))