Ejemplo n.º 1
0
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)}
Ejemplo n.º 2
0
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)}
Ejemplo n.º 3
0
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}
Ejemplo n.º 4
0
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}
Ejemplo n.º 5
0
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'])
Ejemplo n.º 6
0
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)}
Ejemplo n.º 7
0
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']}