trade.app.backend/chat/consumers.py

61 lines
1.8 KiB
Python
Executable File

from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
import json
from .models import Lobby
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}'
checkSave = False
for lobby in Lobby.objects.all():
if lobby.name == self.room_name:
lobby.userCount = lobby.userCount + 1
Lobby.save(lobby)
checkSave = True
break
if checkSave == False:
lobbyRegister = Lobby()
lobbyRegister.name= self.room_name
lobbyRegister.userCount = 1
Lobby.save(lobbyRegister)
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
updateCountOfUsers = Lobby.objects.get(name = self.room_name)
updateCountOfUsers.userCount = updateCountOfUsers.userCount - 1
if updateCountOfUsers.userCount == 0:
Lobby.delete(updateCountOfUsers)
else:
Lobby.save(updateCountOfUsers)
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message
}
)
def chat_message(self, event):
message = event['message']
# Send message to WebSocket
self.send(text_data=json.dumps(message))