def guess_route(game_id, game, db_game, player_token, db_attendee): content = request.get_json() index = db_attendee.index word = content['word'] result, game = guess(game, word=word, player=index) update_game_details(game, game_id) channel = get_other_player_channel(db_game, player_token) app.logger.info(f'Triggering update on socket channel {channel}') pusher_client.trigger(channel, 'game_update', {'message': f'Guessed "{word}"'}) return {'result': result, 'game': safe_game(game, game_id)}
def stop_route(game_id, player_token, game, game_dc, db_game, db_attendee, **kwargs): content = request.get_json() index = db_attendee.index result, game_dc = stop_guessing(game_dc, index) update_game_details(game_dc, game_id) channel = get_other_player_channel(db_game, player_token) app.logger.info(f'Triggering update on socket channel {channel}') pusher_client.trigger(channel, 'game_update', {'message': "Stopped guessing"}) return {'result': result, 'game': safe_game(game_dc, game_id)}
def hint(player_token, db_attendee, db_game, game, game_id, **kwargs): # TODO save that in dB? other_channel = get_other_player_channel(db_game, player_token) hint = Hint(word=request.args.get('word'), count=request.args.get('count')) game = give_hint(game, db_attendee, hint) update_game_details(game, game_id) pusher_client.trigger( other_channel, 'game_update', {'message': f'Hint given: {hint.word} ({hint.count})'}) return {'result': 1, 'game': game}
def start_new_game(game_id, db_game, game, **kwargs): new_game = make_game(game['player1']['name'], game['player2']['name'], game['initialBystanders'], decks=game['decks']) update_game_details(new_game, game_id) for channel in build_channels(db_game): app.logger.info(f'Triggering update on socket channels {channel}') pusher_client.trigger(channel, 'game_update', {}) pusher_client.trigger(channel, 'key_update', {}) game = safe_game(game, game_id) return {'result': 1, 'game': game}
def start_game_split(game_id, player_token, db_game, game, db_attendee, **kwargs): if request.is_json: return get_game_details(db_game=db_game, game=game, game_id=game_id, **kwargs) # Get the corresponding attendee db_attendee = get_attendee(db_game, player_token) if db_attendee is None: return redirect(url_for('setup_game')) player_id = db_attendee.index # AWS video stuff client = get_client_from_env() if db_game.meeting_id is None: _, meeting = create_meeting(client) db_game.set_meeting(meeting) meeting = db_game.meeting_details # Create an attendee try: unique_id, attendee = create_attendee(client, db_game.meeting_id, db_attendee.token) except (client.exceptions.ForbiddenException, client.exceptions.NotFoundException): # Likely the meeting expired, delete and try again db_game.delete_meeting() # Probably should do something about this potential infinite redirect return redirect(request.url) db_attendee.update_attendee_details(attendee) # Actual game stuff player_key = f'player{player_id}' player = dict(game[player_key]) record_viewed(game, player_key) update_game_details(game, game_id) game = safe_game(game, game_id) words_copy = game['words'].copy() words = [[words_copy.pop(0) for _ in range(5)] for __ in range(5)] return render_template( 'game_split.html', thisPlayerName=player['name'], dynamic_script=url_for('dynamic_split_js', game_id=db_game.token, player_token=db_attendee.token), otherPlayerName=game[f'player{3-player_id}']['name'])
def skip(game_id, db_game, game, db_attendee, **kwargs): outcome, game = skip_player(game, db_attendee.index) update_game_details(game, game_id) return {'outcome': outcome, 'game': safe_game(game, game_id)}
def key(game_id, db_game, game, db_attendee, **kwargs): player_index = db_attendee.index player_dict = game[f'player{player_index}'] # Should we ban after one load? update_game_details(game, game_id) return {'green': player_dict['green'], 'black': player_dict['black']}