You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
import json
|
|
|
|
from asgiref.sync import async_to_sync
|
|
from channels.generic.websocket import WebsocketConsumer
|
|
|
|
class ChatConsumer(WebsocketConsumer):
|
|
def connect(self):
|
|
self.room_name = 'main'
|
|
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):
|
|
# 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"]
|
|
print(f'received {text_data}')
|
|
|
|
# Send message to room group
|
|
# chat.message calls the chat_message method
|
|
async_to_sync(self.channel_layer.group_send)(
|
|
self.room_group_name, {"type": "chat.message", "message": text_data}
|
|
)
|
|
|
|
# Receive message from room group
|
|
def chat_message(self, event):
|
|
message = event["message"]
|
|
|
|
# Send message to WebSocket
|
|
self.send(text_data=message)
|
|
|