def find_by_token(token):
    """
    根据token获取用户
    :param token:
    :return:
    """
    return Player.find_by_token(token)
Ejemplo n.º 2
0
def bet(channel_name, **params):
    """
    @api {post} /ReqBet 游戏下注接口
    @apiVersion 1.0.0
    @apiName ReqBet
    @apiGroup WebSocket-Receive
    @apiSuccessExample {json} 通知样例:
    {
        "event": "ReqBet",
        "data": {
            "bet_amount": 200,
            "dice_type": "SUM_THREE"
        }
    }
    """
    log.info('*****************************************')
    log.info(params)
    player_token = get_player_token(channel_name)
    hall_id = get_player_hall(player_token)
    log.info(player_token)
    log.info(hall_id)
    event = NoticeEvent.GameBetErrorNotice.value
    ok, hall = find_by_id(hall_id)
    if not ok:
        log.info('未查询到大厅')
        # bet_error(channel_name, hall.tag)
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41001.value,
                'msg': ServerMsg.CODE41001.value,
                'gold': params['bet_amount']
            })
    if hall.stage != HallStage.BetStage.value:
        log.info("大厅当前阶段【%s】当前阶段不允许下注" % hall.stage)
        bet_error(channel_name, hall.tag)
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41002.value,
                'msg': ServerMsg.CODE41002.value,
                'gold': params['bet_amount']
            })
    form = BetForm(params)
    if not form.is_valid():
        log.info(form.errors)
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41006.value,
                'msg': ServerMsg.CODE41006.value,
                'gold': params['bet_amount']
            })
        # bet_error(channel_name, hall_tag)
    ok, player = Player.find_by_token(player_token)
    if not ok:
        log.info('未查询到玩家')
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41003.value,
                'msg': ServerMsg.CODE41003.value,
                'gold': params['bet_amount']
            })
        # bet_error(channel_name, hall_tag)
    # 获取大厅ID
    hall_id = get_player_hall(player_token)
    sequence = get_hall_new_sequence(hall_id, hall.tag)
    # 检查下注金额
    if not check_value(hall_id, params['bet_amount']):
        log.info('下注金额不正确')
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41004.value,
                'msg': ServerMsg.CODE41004.value,
                'gold': params['bet_amount']
            })
        # bet_error(channel_name, hall_tag)
    # 检查下注类型
    ok, odds = check_bet(hall_id, params['dice_type'])
    if not ok:
        log.info('下注类型不正确')
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41005.value,
                'msg': ServerMsg.CODE41005.value,
                'gold': params['bet_amount']
            })
        # bet_error(channel_name, hall_tag)
    if Decimal(params['bet_amount']) > player.gold:
        log.info('玩家金额不足')
        return create_result(
            hall.tag, event, {
                'code': ServerCode.CODE41007.value,
                'msg': ServerMsg.CODE41007.value,
                'gold': 0
            })
    # 计算下注奖金
    bonus = Decimal(params['bet_amount']) * Decimal(odds)
    # 扣除玩家金币
    update_player_gold(player.token, -params['bet_amount'])
    # 创建下注记录
    BetRecord.create(player.id, sequence, params['bet_amount'],
                     params['dice_type'], bonus)
    return None
Ejemplo n.º 3
0
 def process_request(request):
     if '/api' in request.path:
         # 客户端校验
         if request.META.get('HTTP_AUTHORIZATION', '').startswith('Token'):
             if not hasattr(request, 'user') or request.user.is_anonymous():
                 try:
                     key = request.META.get('HTTP_AUTHORIZATION').split(
                         ' ')[1]
                     payload = token.decode(key)
                     if payload is None:
                         return JsonResponse({
                             'code':
                             ResultCode.CODE_40001.value,
                             'message':
                             ResultMsg.MSG_40001.value
                         })
                     db_token = KeyValue.get_token(payload['user']['id'])
                     if db_token is None:
                         return JsonResponse({
                             'code':
                             ResultCode.CODE_40001.value,
                             'message':
                             ResultMsg.MSG_40001.value
                         })
                     if key != db_token.value:
                         return JsonResponse({
                             'code':
                             ResultCode.CODE_40001.value,
                             'message':
                             ResultMsg.MSG_40001.value
                         })
                     pk = payload['user']['id']
                     user = User.objects.get(id=pk)
                     KeyValue.get_token(user.id)
                     request.user = request._cached_user = user
                 except User.DoesNotExist:
                     return JsonResponse({
                         'code':
                         ResultCode.CODE_40001.value,
                         'message':
                         ResultMsg.MSG_40001.value
                     })
                 except IndexError:
                     return JsonResponse({
                         'code':
                         ResultCode.CODE_40001.value,
                         'message':
                         ResultMsg.MSG_40001.value
                     })
         else:
             return JsonResponse({
                 'code': ResultCode.CODE_40001.value,
                 'message': ResultMsg.MSG_40001.value
             })
     elif '/three' in request.path:
         # 客户端校验
         if request.META.get('HTTP_AUTHORIZATION', '').startswith('Token'):
             if not hasattr(request, 'user') or request.user.is_anonymous():
                 try:
                     key = request.META.get('HTTP_AUTHORIZATION').split(
                         ' ')[1]
                     pass
                     ok, player = Player.find_by_token(key)
                     if not ok:
                         return JsonResponse({
                             'code':
                             ResultCode.CODE_40001.value,
                             'message':
                             ResultMsg.MSG_40001.value
                         })
                     request.player = player
                 except Player.DoesNotExist:
                     return JsonResponse({
                         'code':
                         ResultCode.CODE_40001.value,
                         'message':
                         ResultMsg.MSG_40001.value
                     })
                 except IndexError:
                     return JsonResponse({
                         'code':
                         ResultCode.CODE_40001.value,
                         'message':
                         ResultMsg.MSG_40001.value
                     })
         else:
             return JsonResponse({
                 'code': ResultCode.CODE_40001.value,
                 'message': ResultMsg.MSG_40001.value
             })