from ..AGame import AGame from channels.generic.websocket import WebsocketConsumer from .TicTacToePlayer import TicTacToePlayer from .TicTacToeSpectator import TicTacToeSpectator class TicTacToeGame(AGame): def __init__(self, game_id: int, game_manager): super().__init__("tictactoe", game_id, game_manager) def _everbody_is_here(self): return len(self.players) == len(self.get_players_connected()) def _player_join(self, user_id: int, socket: WebsocketConsumer): if (self.model.started): return None player = self.get_player_by_user_id(user_id) if (player is None): return None # check if player is already connected if (player.is_connected()): player.disconnect(1001) player.socket = socket return player def _spectator_join(self, user_id: int, socket: WebsocketConsumer): spectator:TicTacToeSpectator = TicTacToeSpectator(user_id, socket, self) self.spectators.append(spectator) return spectator def join(self, user_id: int, socket: WebsocketConsumer) -> TicTacToeSpectator | TicTacToePlayer: member: TicTacToePlayer = self._player_join(user_id, socket) if (member is None): member: TicTacToeSpectator = self._spectator_join(user_id, socket) return member