from channels.generic.websocket import WebsocketConsumer from django.contrib.auth.models import User import json from .objects.GameRoomManager import GameRoomManager from .objects.GameMember import GameMember game_room_manager: GameRoomManager = GameRoomManager() class GameWebSocket(WebsocketConsumer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.channel_name = "games" self.group_name = "games" def connect(self): self.user: User = self.scope["user"] if (self.user.is_anonymous or not self.user.is_authenticated): return self.channel_layer.group_add(self.group_name, self.channel_name) self.game_id = int(self.scope['url_route']['kwargs']['game_id']) self.room = game_room_manager.get(self.game_id) if (self.room is None): self.send("Game not found.") self.disconnect(1017) self.member = GameMember(self.user.pk, self, self.room) self.room.append(self.member) def receive(self, text_data: str = None, bytes_data: bytes = None): if (text_data is None): return data: dict = json.loads(text_data) self.member.receive(data) def disconnect(self, close_code): member = self.room.get_member_by_socket(self) if (member is not None): self.room.remove(self.member, close_code)