def game_session_collect_locations(sio: ServerApp, session_id: int, pickup_locations: Tuple[int, ...]): current_user = sio.get_current_user() session: GameSession = database.GameSession.get_by_id(session_id) membership = GameSessionMembership.get_by_ids(current_user.id, session_id) if session.state != GameSessionState.IN_PROGRESS: raise InvalidAction( "Unable to collect locations of sessions that aren't in progress") if membership.is_observer: raise InvalidAction("Observers can't collect locations") description = session.layout_description receiver_players = set() for location in pickup_locations: receiver_player = _collect_location(session, membership, description, location) if receiver_player is not None: receiver_players.add(receiver_player) if not receiver_players: return for receiver_player in receiver_players: try: receiver_membership = GameSessionMembership.get_by_session_position( session, row=receiver_player) flask_socketio.emit( "game_has_update", { "session": session_id, "row": receiver_player, }, room= f"game-session-{receiver_membership.session.id}-{receiver_membership.user.id}" ) except peewee.DoesNotExist: pass _emit_session_update(session)
def game_session_collect_locations(sio: ServerApp, session_id: int, pickup_locations: Tuple[int, ...]): current_user = sio.get_current_user() session: GameSession = database.GameSession.get_by_id(session_id) membership = GameSessionMembership.get_by_ids(current_user.id, session_id) if session.state != GameSessionState.IN_PROGRESS: raise InvalidAction( "Unable to collect locations of sessions that aren't in progress") if membership.is_observer: raise InvalidAction("Observers can't collect locations") logger().info( f"{_describe_session(session, membership)} found items {pickup_locations}" ) description = session.layout_description receiver_players = set() for location in pickup_locations: receiver_player = _collect_location(session, membership, description, location) if receiver_player is not None: receiver_players.add(receiver_player) if not receiver_players: return for receiver_player in receiver_players: try: receiver_membership = GameSessionMembership.get_by_session_position( session, row=receiver_player) _emit_game_session_pickups_update(sio, receiver_membership) except peewee.DoesNotExist: pass _emit_session_actions_update(session)