def can_join(self, user=None): """ Join in session with different status: ready to play, not ready etc. """ if not self.has_free_slots(): return False if user is not None: self.set_user(user) ''' decrement slots ''' self.session.available_slots -= 1 """ check again if session has free slots. if no slots available then change session status to "ready to play" (game), and set the player """ if not self.has_free_slots(): self.session.status = SessionStatus.ready_to_play.value player_status = PlayerStatus.not_ready.value if self.session.status == SessionStatus.ready_to_play.value: player_status = PlayerStatus.ready_to_play.value ''' create player object ''' player = Player(uid = self.user.uid, status = player_status ) ''' set player additional info ''' player.get_player_info(self.user) ''' add player to current session ''' self.add_player(player) ''' save session ''' self.session.save() return True
def create(self): """ Create new session. default status is 'incomplete' """ if self.user is None: raise TypeError("USER object must be provided!") ''' generate random name if not provided ''' while not self.find_session(self.generate_session_name()): """ create new session with one player and status 'free' """ player = Player(uid = self.user.uid, status = PlayerStatus.ready_to_play.value ) ''' get player info based on current user ''' player.get_player_info(self.user) ''' set available slots ''' self.slots -= 1 ''' create session object ''' self.session = Session(name = self.session_name, owner_uid = self.user.uid, status = SessionStatus.incomplete.value, is_active = True, expired_at = self.expire_in(), players = [player], slots = self.slots, game_name = self.game_name, available_slots = self.slots ) self.session.save() return self.session return None