From b6831616cccda2fbf31fdb2e42fda5869d6c3fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhn-Vitus=20Sa=C3=9F?= Date: Sat, 15 Mar 2025 12:57:05 +0100 Subject: [PATCH] Channel Layers --- .gitignore | 3 ++- core/chat/consumers.py | 26 ++++++++++++++++++++++++-- core/core/settings.py | 13 ++++++++++++- requirements.txt | 3 ++- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 3d492e8..e0002f6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ __pycache__ .venv db.sqlite3 tailwindcss.exe -t-style.css \ No newline at end of file +t-style.css +dump.rdb diff --git a/core/chat/consumers.py b/core/chat/consumers.py index c81bf2e..8a5313b 100644 --- a/core/chat/consumers.py +++ b/core/chat/consumers.py @@ -1,18 +1,40 @@ -# chat/consumers.py import json +from asgiref.sync import async_to_sync from channels.generic.websocket import WebsocketConsumer class ChatConsumer(WebsocketConsumer): def connect(self): + self.room_name = self.scope["url_route"]["kwargs"]["room_name"] + self.room_group_name = f"chat_{self.room_name}" + + # Join room group + async_to_sync(self.channel_layer.group_add)( + self.room_group_name, self.channel_name + ) + self.accept() def disconnect(self, close_code): - pass + # Leave room group + async_to_sync(self.channel_layer.group_discard)( + self.room_group_name, self.channel_name + ) + # Receive message from WebSocket def receive(self, text_data): text_data_json = json.loads(text_data) message = text_data_json["message"] + # Send message to room group + async_to_sync(self.channel_layer.group_send)( + self.room_group_name, {"type": "chat.message", "message": message} + ) + + # Receive message from room group + def chat_message(self, event): + message = event["message"] + + # Send message to WebSocket self.send(text_data=json.dumps({"message": message})) \ No newline at end of file diff --git a/core/core/settings.py b/core/core/settings.py index 4e60f43..ec96972 100644 --- a/core/core/settings.py +++ b/core/core/settings.py @@ -133,4 +133,15 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' LOGIN_URL = '/account/login/' # Daphne -ASGI_APPLICATION = "core.asgi.application" \ No newline at end of file +ASGI_APPLICATION = "core.asgi.application" + +# Channels +ASGI_APPLICATION = "core.asgi.application" +CHANNEL_LAYERS = { + "default": { + "BACKEND": "channels_redis.core.RedisChannelLayer", + "CONFIG": { + "hosts": [("127.0.0.1", 6379)], + }, + }, +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index b387401..aa31846 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ django~=5.1.4 channels~=4.2.0 -daphne~=4.1.2 \ No newline at end of file +daphne~=4.1.2 +channels_redis \ No newline at end of file