def common_function_10009(request): req = SetInviteUserReq() rsp = SetInviteUserRsp() req.ParseFromString(request['body']) db_user = User.objects.filter(id=req.uin).first() if not db_user: rsp.ret = error_contrast.ERROR_USER_INVITED_NOT_EXIST return rsp.SerializeToString() uin = request['uin'] user = RedisUserMgr().get_user(uin) if user.has_invited: rsp.ret = error_contrast.ERROR_USER_HASBEEN_INVITED return rsp.SerializeToString() # logger.debug('req.uin:%d', req.uin) rsp.ret = 0 user.update(dict( user_inviter=req.uin, has_invited=True, )) # user.user_inviter = req.uin # user.has_invited = True return rsp.SerializeToString()
def unbind_id_and_conn(conn_id): user_id = FireflyMap().get_user_by_conn(conn_id) if user_id: # 先更改用户状态,直接换成不在线就OK了 user = RedisUserMgr().get_user(user_id) user.update(dict( status=config.LOGIN_USER_STATUS_OFFLINE, )) FireflyMap().detach_user_conn(user_id) else: logger.debug('conn:%s not find user_id', conn_id)
def auth_function_1002(request): # unicode """ 微信登录 """ from common.mahjong_pb2 import WeChatLoginReq from common.models import WXUser req = WeChatLoginReq() req.ParseFromString(request['body']) rsp = LoginRsp() # logger.debug('1002 req:%s', req) src = "%s&%s&%s" % (config.ONLY_PAY_SECRET, req.openid, req.token) sign = hashlib.md5(src).hexdigest() if req.sign != sign: logger.error('invalid sign! req: %s', req) rsp.ret = error_contrast.ERROR_INVALID_PARAMS return rsp.SerializeToString() appid = str( config.WX_LOGIN_CHANNEL_TO_APPID.get(req.channel, config.WX_LOGIN_APPID)) wx_user = WXUser.objects.filter( userid=req.openid, appid=appid, ).first() if not wx_user or wx_user.access_token != req.token: celery_delay( wx_login, request, ) return if request['uin'] and request['uin'] != wx_user.native_id: rsp.ret = error_contrast.ERROR_USER_BIND_NOT_MATCH return rsp.SerializeToString() user = RedisUserMgr().get_user(wx_user.native_id) user.update( dict( channel=req.channel or None, version=req.version, os=req.os or 'android', )) rsp = common_user_reg_or_login(request, user) tell_transfer_to_bind(user.uin, request['connid']) write_to_users(user.uin, proto.CMD_REG, rsp)
def func_wrapper(request, *args, **kwargs): user = RedisUserMgr().get_user(request.get('uin', None)) request = dict( uin=user.uin, body=request.get('body', None), user=user, ) return func(request, *args, **kwargs)
def common_function_10005(request): ntf = CreateFormalBill() ntf.ParseFromString(request['body']) uin = ntf.uin item_id = ntf.item_id bill = Commodity.objects.filter(uin=uin, item_id=item_id) if bill: bill.update(bill_state=1) # 下发房卡变化通知 user = RedisUserMgr().get_user(uin) user_room_card_notify(user)
def modify_room_card(request): # 判断用户存在不存在 # 修改使用post请求 form = ModifyRoomCardForm(request.POST) if not form.is_valid(): return render(request, 'write.html', dict(form=form, )) uin = form.cleaned_data['user_id'] room_card_num = form.cleaned_data['room_card_num'] remark = request.user.username + ' : ' + form.cleaned_data['remark'] user = RedisUserMgr().get_user(uin) modify_card(user, room_card_num, None, remark, user_in_web=True) return render(request, 'write.html', dict(form=form, ))
def common_function_10004(request): ntf = UserCreatePreBill() ntf.ParseFromString(request['body']) uin = ntf.uin name = ntf.name item_id = ntf.item_id user = RedisUserMgr().get_user(uin) logger.debug('create_pre_bill, uin:%s, name:%s, item_id:%s', uin, name, item_id) # 把预付单先加进去 Commodity( uin=user.uin, channel=user.channel, name=config.COMMODITY_ITEM_DICT[name].get('name'), item_type=config.COMMODITY_ITEM_DICT[name].get('type'), currency=config.COMMODITY_ITEM_DICT[name].get('cur'), amount=config.COMMODITY_ITEM_DICT[name].get('amt'), item_id=item_id, bill_state=0, # 0代表订单生成 ).save()
def user(self): return RedisUserMgr().get_user(self.uin)
def auth_function_1001(request): """ 注册或登录 :param request: :return: """ req = LoginReq() req.ParseFromString(request['body']) rsp = LoginRsp() logger.debug('req:%s', req) if not req.uuid: rsp.ret = error_contrast.ERROR_INVALID_PARAMS return rsp.SerializeToString() if not req.sign: rsp.ret = error_contrast.ERROR_INVALID_PARAMS return rsp.SerializeToString() src = "%s&%s&%s" % (config.ONLY_PAY_SECRET, req.uuid, req.version) if req.sign != hashlib.md5(src).hexdigest(): logger.error('invalid sign! req: %s', req) rsp.ret = error_contrast.ERROR_INVALID_PARAMS return rsp.SerializeToString() if is_app_crime(req.channel, req.version): if not req.extra_username or not req.extra_password: # 请输入用户名和密码 rsp.ret = error_contrast.ERROR_ENTER_USERNAME_AND_PASSWORD return rsp.SerializeToString() db_user = User.objects.filter( extra_username=req.extra_username).first() if req.is_register and db_user: # 用户名已注册 rsp.ret = error_contrast.ERROR_USERNAME_HAS_EXIST return rsp.SerializeToString() if not req.is_register: if not db_user: # 用户名不存在 rsp.ret = error_contrast.ERROR_USERNAME_NOT_EXIST return rsp.SerializeToString() if db_user and db_user.extra_password != req.extra_password: # 密码错误 rsp.ret = error_contrast.ERROR_PASSWORD_IS_ERROR return rsp.SerializeToString() else: db_user = User.objects.filter(uuid=req.uuid).first() if not db_user: db_user = User() db_user.password = get_password() if is_app_crime(req.channel, req.version): db_user.uuid = req.uuid + req.extra_username db_user.nick = req.extra_username db_user.extra_username = req.extra_username db_user.extra_password = req.extra_password else: db_user.uuid = req.uuid db_user.nick = req.nick[:6] db_user.card = 100 if req.os: db_user.os = req.os db_user.save() # 转成Redis对象 user = RedisUserMgr().get_user(db_user.uin) user.attach_db_user(db_user) user.update(dict( channel=req.channel, version=req.version, os=req.os, )) tell_transfer_to_bind(user.uin, request['connid']) return common_user_reg_or_login(request, user)
def parse_desk_record_to_db(round_id): records = rds_tmp.lrange(config.REDIS_KEY_DESK_RECORD_PREFIX + round_id, 0, -1) if not records: return # 解序列化并按时间排序 records = sorted([json.loads(r) for r in records], key=itemgetter('optime')) if len(records) > 1: first, mid_records, last = records[0], records[1:-1], records[-1] if first['source'] != config.STATISTIC_MAHJONG_DESK_GAME_START: logger.error('first record is not game start, desk uuid: %s', round_id) return # 不是牌桌结束,那就是半路把桌子解散掉了 if last['source'] != config.STATISTIC_MAHJONG_DESK_GAME_OVER: while True: # 会有多条 if last['source'] == config.STATISTIC_MAHJONG_DESK_GAME_START: # 最后一条如果是用户退桌,删除掉 last = mid_records.pop() else: break if last['source'] != config.STATISTIC_MAHJONG_DESK_GAME_OVER: logger.error('last record is not game over, desk uuid: %s', round_id) return user_records = defaultdict(list) round_id = first['uuid'] desk_id = first['desk_id'] desk_model = dict( desk_round=first['desk_round'], desk_type=first['desk_type'], desk_seat_limit=first['desk_seat_limit'], desk_win_type=first['desk_win_type'], desk_has_laizi=first['desk_has_laizi'], desk_can_win_by_qidui=first['desk_can_win_by_qidui'], desk_bird_num=first['desk_bird_num'], desk_piaofen_max_num=first['desk_piaofen_max_num'], desk_has_shanghuo=first['desk_has_shanghuo'], desk_master_uin=first['desk_master_uin'], ) user_data = first['user_info'] for uin in user_data: user_records[int(uin)].append(round_id) for item in records: if item['source'] == config.STATISTIC_MAHJONG_DESK_GAME_OVER: game_round = item['game_round'] desk_model['desk_bird_card'] = item['desk_bird_card'] desk_model['desk_over_time'] = item['desk_over_time'] desk_model['desk_winners'] = item['desk_winners'] user_info = item['user_info'] DeskRecord( uuid=round_id, desk_id=desk_id, game_round=game_round, desk_model=desk_model, user_data=user_info, ).save() # 存储最多近期100条记录 users = RedisUserMgr().get_users(user_records.keys(), load_db_user=True) for uin, user in users.items(): records = list(user.desk_records or []) if round_id not in records: records.insert(0, round_id) if len(records) > 100: records.pop() user.update(dict( desk_records=records )) else: # 开局就退了的选手,到时候统计起来 logger.debug('only one round and not over, round id: %s', round_id) rds_tmp.delete(config.REDIS_KEY_DESK_RECORD_PREFIX + round_id)
def wx_login(request): from common.models import WXUser, User from django.db.utils import IntegrityError from common.bus_func import replace_forbidden_content, get_user_info req = WeChatLoginReq() req.ParseFromString(request['body']) uin = request['uin'] rsp = LoginRsp() appid = str(config.WX_LOGIN_CHANNEL_TO_APPID.get(req.channel, config.WX_LOGIN_APPID)) wx_user = WXUser.objects.filter( userid=req.openid, appid=appid, ).first() # logger.debug('wx_user find') wx_info = dict() if not wx_user: wx_info = get_user_info(req.openid, req.token) # logger.debug('wx_info:%s', wx_info) if not wx_info: rsp.ret = error_contrast.ERROR_WX_LOGIN_FAILED return rsp.SerializeToString() # logger.debug('wx_user create') wx_user = WXUser( userid=req.openid, access_token=req.token, expire_date=req.expire_date, appid=appid, ) # logger.debug('wx_user create success') if not uin: # logger.debug('native_user create, head:%s', wx_info.get('headimgurl')) native_user = User( password=get_password(), nick=replace_forbidden_content(wx_info.get('nickname')[:6]), sex=config.SEX_MALE if wx_info.get('sex') == 1 else config.SEX_FEMALE, channel=req.channel or None, version=req.version, os=req.os or 'android', portrait_path=wx_info.get('headimgurl'), ) # logger.debug('native_user create success') native_user.save() # logger.debug('native_user save success') wx_user.native_id = native_user.id else: if WXUser.objects.filter(native_id=uin): # id如果已经和其他绑定过,就返回报错了,否则加金币会重复,只要不停的换账号就行了 rsp.ret = error_contrast.ERROR_WX_BIND_ALREADY return rsp.SerializeToString() try: wx_user.save() except IntegrityError, e: logger.error(e.message, exc_info=True) rsp.ret = error_contrast.ERROR_WX_LOGIN_FAILED return rsp.SerializeToString() # logger.debug('wx_user save success') user = RedisUserMgr().get_user(wx_user.native_id)
# logger.debug('access_token not the same') wx_info = get_user_info(req.openid, req.token) # logger.debug('not wx_info:%s', wx_info) if not wx_info: rsp.ret = error_contrast.ERROR_WX_LOGIN_FAILED return rsp.SerializeToString() else: # 更新token wx_user.access_token = req.token wx_user.save() if uin and uin != wx_user.native_id: rsp.ret = error_contrast.ERROR_USER_BIND_NOT_MATCH return rsp.SerializeToString() user = RedisUserMgr().get_user(wx_user.native_id) if wx_info.has_key('headimgurl') and user.portrait_path != wx_info.get('headimgurl'): user.update(dict( channel=req.channel or None, version=req.version, os=req.os or 'android', portrait_path=wx_info.get('headimgurl'), )) else: user.update(dict( channel=req.channel or None, version=req.version, os=req.os or 'android', )) # logger.debug('start common_user_reg_or_login')