Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- from channels.generic.websocket import AsyncWebsocketConsumer
- from .models import Message
- from django.contrib.auth.models import User
- class ChatConsumer(AsyncWebsocketConsumer):
- async def connect(self):
- self.room_name = self.scope['url_route']['kwargs']['room_name']
- self.room_group_name = f'chat_{self.room_name}'
- # Присъединяване към групата
- await self.channel_layer.group_add(
- self.room_group_name,
- self.channel_name
- )
- await self.accept()
- async def disconnect(self, close_code):
- # Напускане на групата
- await self.channel_layer.group_discard(
- self.room_group_name,
- self.channel_name
- )
- async def receive(self, text_data):
- text_data_json = json.loads(text_data)
- message = text_data_json['message']
- # Записване на съобщението в базата
- user = self.scope["user"]
- if user.is_authenticated:
- Message.objects.create(user=user, room=self.room_name, content=message)
- # Изпращане на съобщението на всички в групата
- await self.channel_layer.group_send(
- self.room_group_name,
- {
- 'type': 'chat_message',
- 'message': message,
- 'username': user.username if user.is_authenticated else 'Anonymous'
- }
- )
- async def chat_message(self, event):
- message = event['message']
- username = event['username']
- await self.send(text_data=json.dumps({
- 'message': message,
- 'username': username
- }))
Advertisement
Add Comment
Please, Sign In to add comment