Esempio n. 1
0
def reclaim_board(request):
    ip = request.META['REMOTE_ADDR']
    game = get_game(site=get_current_site(request), create=False)
    if game is not None:
        Game.objects.filter(id=game.id).update(last_used=times.now())
    bingo_board = _get_user_bingo_board(request)

    if not bingo_board is None:
        return redirect(reverse(bingo, kwargs={
            'board_id': bingo_board.board_id}))
    if request.POST:
        reclaim_form = ReclaimForm(request.POST, game=game, prefix="reclaim")
        if reclaim_form.is_valid():
            bingo_board = reclaim_form.cleaned_data['bingo_board']
            request.session['board_id'] = bingo_board.id
            bingo_board.ip = ip
            bingo_board.save()
            return redirect(reverse(bingo, kwargs={'board_id':
                                                   bingo_board.board_id}))
    else:
        reclaim_form = ReclaimForm(prefix="reclaim")
    create_form = CreateForm(prefix="create", game=game)
    return render(request,
                  "bingo/reclaim_board.html", {
                      'reclaim_form': reclaim_form,
                      'create_form': create_form,
                  })
Esempio n. 2
0
def reclaim_board(request):
    ip = request.META['REMOTE_ADDR']
    game = get_game(site=get_current_site(request), create=False)
    if game is not None:
        Game.objects.filter(id=game.id).update(last_used=times.now())
    bingo_board = _get_user_bingo_board(request)

    if not bingo_board is None:
        return redirect(
            reverse(bingo, kwargs={'board_id': bingo_board.board_id}))
    if request.POST:
        reclaim_form = ReclaimForm(request.POST, game=game, prefix="reclaim")
        if reclaim_form.is_valid():
            bingo_board = reclaim_form.cleaned_data['bingo_board']
            request.session['board_id'] = bingo_board.id
            bingo_board.ip = ip
            bingo_board.save()
            return redirect(
                reverse(bingo, kwargs={'board_id': bingo_board.board_id}))
    else:
        reclaim_form = ReclaimForm(prefix="reclaim")
    create_form = CreateForm(prefix="create", game=game)
    return render(request, "bingo/reclaim_board.html", {
        'reclaim_form': reclaim_form,
        'create_form': create_form,
    })
Esempio n. 3
0
def main(request, reclaim_form=None, create_form=None):
    game = get_game(site=get_current_site(request), create=False)
    bingo_board = _get_user_bingo_board(request)

    create_form = CreateForm(prefix="create", game=game)
    reclaim_form = ReclaimForm(prefix="reclaim")

    boards = BingoBoard.objects.filter(game=game)
    old_games = Game.objects.filter(
        site=get_current_site(request)
    ).exclude(
        # games without any boards created
        bingoboard=None
    ).exclude(
        # games without game_id are hidden
        game_id=None
    ).order_by("-created")

    if game is not None:
        old_games = old_games.exclude(id=game.id)

    return render(request, "bingo/main.html", {
        'my_board': bingo_board,
        'create_form': create_form,
        'reclaim_form': reclaim_form,
        'boards': boards,
        'current_game': game,
        'old_games': old_games,
        'can_start_game': not GAME_START_DISABLED,
        })
    def post(self):
        game_id = self.get_argument('game_id')
        game_password = self.get_argument('game_password')
        username = self.get_argument('username')

        session = Session()
        try:
            user = get_user(username)
            game = get_game(game_id=game_id, game_password=game_password)
            try:
                usergame = get_usergame(user.id, game.id)
                if usergame is not None:
                    response_dict = get_response_dict(True)
            except NoResultFound:
                if not game.started:
                    game.add_user(user)
                    response_dict = get_response_dict(True)
                else:
                    response_dict = get_response_dict(False, 'Game has started; you cannot join.')
                    
        except Exception as e:
            session.rollback()
            response_dict = get_response_dict(False, e.message)
        finally:
            Session.remove()
            self.finish(simplejson.dumps(response_dict))
Esempio n. 5
0
def main(request, reclaim_form=None, create_form=None):
    game = get_game(site=get_current_site(request), create=False)
    bingo_board = _get_user_bingo_board(request)

    create_form = CreateForm(prefix="create", game=game)
    reclaim_form = ReclaimForm(prefix="reclaim")

    boards = BingoBoard.objects.filter(game=game)
    old_games = Game.objects.filter(site=get_current_site(request)).exclude(
        # games without any boards created
        bingoboard=None).exclude(
            # games without game_id are hidden
            game_id=None).order_by("-created")

    if game is not None:
        old_games = old_games.exclude(id=game.id)

    return render(
        request, "bingo/main.html", {
            'my_board': bingo_board,
            'create_form': create_form,
            'reclaim_form': reclaim_form,
            'boards': boards,
            'current_game': game,
            'old_games': old_games,
            'can_start_game': not GAME_START_DISABLED,
        })
 def post(self):
     shot_id = self.get_argument('shot_id')
     username = self.get_argument('username')
     shot_upheld = self.get_argument('shot_upheld')
     claim = self.get_argument('claim', '')
     
     try:
         resolving_user = get_user(username=username)
         shot = get_shot(shot_id)
         game = get_game(shot.game_id)
         session = Session()
         
         mission = get_mission(game_id=game.id, assassin_id=shot.assassin_id, target_id=shot.target_id, completed_timestamp=None)
         
         if shot_upheld == 'True':
             if shot.target_id == resolving_user.id or resolving_user in game.game_masters:
                 shot.kill_upheld = True
                 game.mission_completed(mission, shot)
                 response_dict = get_response_dict(True)
         else:
             if shot.target_id == resolving_user.id:
                 dispute = Dispute(game.id, shot_id, claim)
                 session.add(dispute)
                 session.flush()
                 session.commit()
                 response_dict = get_response_dict(True)
             elif resolving_user in game.game_masters:
                 shot.kill_upheld = False
                 response_dict = get_response_dict(True)
     except Exception as e:
         session.rollback()
         response_dict = get_response_dict(False, e.message)
     finally:
         Session.remove()
         self.finish(simplejson.dumps(response_dict))
    def post(self):
        username = self.get_argument('username')
        game_id = self.get_argument('game_id')
        dispute_id = self.get_argument('dispute_id')
        shot_upheld = self.get_argument('dispute_upheld')
        gm_decision_reason = self.get_argument('gm_decision_reason')

        session = Session()
        try:
            dispute = session.query(Dispute).filter_by(id=dispute_id).one()
            shot = session.query(Shot).filter_by(id=dispute.shot_id).one()
            resolving_user = get_user(username=username)
            game = get_game(game_id)
            mission = get_mission(game_id=game_id, assassin_id=shot.assassin_id, target_id=shot.target_id, completed_timestamp=None)
            if resolving_user in game.game_masters:
                if shot_upheld == 'True':
                    game.mission_completed(mission)
                    dispute.shot_upheld = True
                else:
                    dispute.shot_upheld = False
                    target_usergame = get_usergame(shot.target_id, game.id)
                    if target_usergame.alive == None:
                        target_usergame.alive = True
                        session.add(target_usergame)
                dispute.gm_decision_reason = gm_decision_reason
                session.add(dispute)
                session.flush()
                session.commit()
                response_dict = get_response_dict(True)
                
            else:
                response_dict = get_response_dict(False, 'Only the game master can resolve a dispute')
        except Exception, e:
            session.rollback()
            response_dict = get_response_dict(False, e.message)
    def update_games(self, games):
        for game_info in games:
            game = get_game(self.year, self.week_number, game_info.number)
            game.team1_actual_points = game_info.team1_score if game_info.team1_score != '' else -1
            game.team2_actual_points = game_info.team2_score if game_info.team2_score != '' else -1
            game.quarter = game_info.quarter
            game.time_left = game_info.time_left

            game_state = game_info.state
            if game_state == "not_started":
                game.game_state = NOT_STARTED
            elif game_state == "in_progress":
                game.game_state = IN_PROGRESS
            elif game_state == "final":
                game.game_state = FINAL
            else:
                raise AssertionError, "Unexpected game state value: %s" % (
                    game_state)

            if game_state == "final":
                game.winner = CalculateResults(None).get_pool_game_winner(game)
            else:
                game.winner = 0

            game.save()

            # TODO not entirely sure about this, but if the update games page gets submitted,
            # change the Week.winner field to None since it will no longer be accurate
            # if any scores were changed
            week = get_week(self.year, self.week_number)
            week.winner = None
            week.save()
Esempio n. 9
0
def create_board(request):
    bingo_board = _get_user_bingo_board(request)
    game = bingo_board.game if bingo_board is not None else None
    user = request.user

    if bingo_board:
        Game.objects.filter(id=bingo_board.game.id).update(
            last_used=times.now())
        return redirect(reverse(bingo, kwargs={
            'board_id': bingo_board.board_id}))
    elif request.POST:
        create_form = CreateForm(
            request.POST,
            prefix="create",
            game=game)

        if create_form.is_valid():
            with transaction.atomic():
                ip = request.META['REMOTE_ADDR']
                password = create_form.cleaned_data.get('password')
                game_description = create_form.cleaned_data.get(
                    'description', '')
                game = get_game(
                    site=get_current_site(request),
                    description=game_description,
                    create=True)
                Game.objects.filter(id=game.id).update(
                    last_used=times.now())

                # if the user is logged in, associate the board with
                # the user, and ignore the password
                # (so no other user can claim the board)
                user = user if user.is_authenticated() else None
                if user:
                    password = None

                bingo_board = BingoBoard(
                    game=game, user=user, ip=ip, password=password)
                bingo_board.save()

                if USE_SSE:
                    _publish_num_users(game.site.id, game.num_users(),
                                       game.num_active_users())

                return redirect(reverse(bingo, kwargs={
                    'board_id': bingo_board.board_id}))
        else:
            reclaim_form = ReclaimForm(prefix="reclaim")
            return render(
                request,
                "bingo/reclaim_board.html",
                {
                    'reclaim_form': reclaim_form,
                    'create_form': create_form,
                }
            )
    else:
        return redirect(reverse(main))
Esempio n. 10
0
async def index(request):
    current_ws = web.WebSocketResponse()
    if not current_ws.can_prepare(request).ok:
        return aiohttp_jinja2.render_template('index.html', request, {})

    await current_ws.prepare(request)

    game = get_game(request=request)
    user = User(ws=current_ws)
    game.connect(user=user)
    opponent = game.get_opponent(user=user)

    if opponent is not None:
        # Если есть оппонент, то его необходимо уведомить о подключении другого игрока
        opponent_message = {
            'action': 'join',
            'opponentSign': user.sign,
        }
        await opponent.ws.send_json(opponent_message)
    user_message = {
        'action': 'connect',
        'sign': user.sign,
        'game_id': game.id,
        'opponentName': str(opponent) if opponent else None,
    }
    await user.ws.send_json(user_message)

    async for msg in user.ws:
        if opponent is None:
            opponent = game.get_opponent(user=user)
        if msg.type == web.WSMsgType.text and opponent is not None:
            data = json.loads(msg.data)
            if 'coordinates' in data:
                i = int(data['coordinates']['i'])
                j = int(data['coordinates']['j'])
                if game.set_in_field(user, i, j):
                    await opponent.ws.send_json(data)

                winner = game.get_winner()
                if winner == user.sign:
                    await user.ws.send_json({'action': 'win'})
                    await opponent.ws.send_json({'action': 'lose'})
                    game.state = STATE.GAME_OVER
                elif winner == opponent.sign:
                    await user.ws.send_json({'action': 'lose'})
                    await opponent.ws.send_json({'action': 'win'})
                    game.state = STATE.GAME_OVER

    if opponent:
        await opponent.ws.send_json({'action': 'disconnect'})
    game.state = STATE.OPPONENT_DISCONNECTED
    del user

    return current_ws
 def post(self):
     game_id = self.get_argument('game_id')
     session = Session()
     try:
         game = get_game(game_id)
         game.start()
         response_dict = get_response_dict(True)
     except Exception as e:
         session.rollback()
         response_dict = get_response_dict(False, e.message)
     Session.remove()
     self.finish(simplejson.dumps(response_dict))
Esempio n. 12
0
def create_board(request):
    bingo_board = _get_user_bingo_board(request)
    game = bingo_board.game if bingo_board is not None else None
    user = request.user

    if bingo_board:
        Game.objects.filter(id=bingo_board.game.id).update(
            last_used=times.now())
        return redirect(
            reverse(bingo, kwargs={'board_id': bingo_board.board_id}))
    elif request.POST:
        create_form = CreateForm(request.POST, prefix="create", game=game)

        if create_form.is_valid():
            with transaction.atomic():
                ip = request.META['REMOTE_ADDR']
                password = create_form.cleaned_data.get('password')
                game_description = create_form.cleaned_data.get(
                    'description', '')
                game = get_game(site=get_current_site(request),
                                description=game_description,
                                create=True)
                Game.objects.filter(id=game.id).update(last_used=times.now())

                # if the user is logged in, associate the board with
                # the user, and ignore the password
                # (so no other user can claim the board)
                user = user if user.is_authenticated() else None
                if user:
                    password = None

                bingo_board = BingoBoard(game=game,
                                         user=user,
                                         ip=ip,
                                         password=password)
                bingo_board.save()

                if USE_SSE:
                    _publish_num_users(game.site.id, game.num_users(),
                                       game.num_active_users())

                return redirect(
                    reverse(bingo, kwargs={'board_id': bingo_board.board_id}))
        else:
            reclaim_form = ReclaimForm(prefix="reclaim")
            return render(request, "bingo/reclaim_board.html", {
                'reclaim_form': reclaim_form,
                'create_form': create_form,
            })
    else:
        return redirect(reverse(main))
Esempio n. 13
0
def _get_user_bingo_board(request):
    bingo_board = None
    game = get_game(site=get_current_site(request), create=False)
    session_board_id = request.session.get('board_id', None)
    user = request.user if request.user.is_authenticated() else None
    ip = request.META['REMOTE_ADDR']

    # try the board_id in the session
    if not session_board_id is None:
        try:
            bingo_board = BingoBoard.objects.get(id=session_board_id,
                                                 game=game)
            bingo_board.ip = ip
        except BingoBoard.DoesNotExist, e:
            pass
        # double board_id?
        except BingoBoard.MultipleObjectsReturned:
            pass
Esempio n. 14
0
def _get_user_bingo_board(request):
    bingo_board = None
    game = get_game(site=get_current_site(request), create=False)
    session_board_id = request.session.get('board_id', None)
    user = request.user if request.user.is_authenticated() else None
    ip = request.META['REMOTE_ADDR']

    # try the board_id in the session
    if not session_board_id is None:
        try:
            bingo_board = BingoBoard.objects.get(id=session_board_id,
                                                 game=game)
            bingo_board.ip = ip
        except BingoBoard.DoesNotExist, e:
            pass
        # double board_id?
        except BingoBoard.MultipleObjectsReturned:
            pass
    def post(self):
        username = self.get_argument('username')
        game_id = self.get_argument('game_id')
        shot_picture = None
        target_username = self.get_argument('target_username')
        mission_id = self.get_argument('mission_id', None)
        session = Session()
        try:
            target_user = get_user(username=target_username)
            assassin_user = get_user(username=username)
            game = get_game(game_id)
            mission = get_mission(game_id=game_id, assassin_username=username, target_id=target_user.id)
            
            picture_binary = self.request.files['shot_picture'][0]['body']
            shot_picture_url = imgur.upload(file_body=picture_binary)

            player_shooting_target = Shot(assassin_id=assassin_user.id, \
                                        target_id=target_user.id, \
                                        game_id=game_id, \
                                        shot_picture=shot_picture_url)
            session.add(player_shooting_target)
            session.flush()
            session.commit()
            target_usergame = get_usergame(user_id=target_user.id, game_id=game_id)
            if player_shooting_target.is_valid():
                target_usergame.alive = None  # mark them as shot
                target_usergame.pending_shot = player_shooting_target.id
                session.add(target_usergame)
                session.flush()
                session.commit()
                response_dict = get_response_dict(True)
            else:
                if target_usergame.alive is None:
                    response_dict = get_response_dict(False, "Shot invalid.  Your target was previously shot, and the kill needs to be confirmed by him/her or the game master")
                else:
                    response_dict = get_response_dict(False, "Shot invalid.  If this was your target in this game, maybe they had a body double or you need to wait?")
        except Exception as e:
            session.rollback()
            response_dict = get_response_dict(False, e.message)
        finally:
            Session.remove()
            self.finish(simplejson.dumps(response_dict))
Esempio n. 16
0
 def post(self):
     logger = logging.getLogger('DisablePowerup')
     session = Session()
     try:
         game_id = self.get_argument('game_id')
         username = self.get_argument('username')
         power_id = self.get_argument('powerup_id')
         user = get_user(username)
         ug = get_usergame(user.id, game_id)
         
         if(ug.is_game_master):
             game = get_game(game_id)
             game.disable_powerup(user.id, power_id)
             session.commit()
             result_dict = get_response_dict(True)
         else:
             raise Exception("You are not a Game Master for the given game_id")
         
     except Exception, e:
         logger.exception(e)
         session.rollback()
         result_dict = get_response_dict(False, e.message)