72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
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}))
|