Example #1
0
    def create_role(self, msgtype, body):
        limited, message = self.access_limited()
        if limited:
            return fail_msg(msgtype, reason=message)
        req = poem_pb.CreateRoleRequest()
        req.ParseFromString(body)
        modelID = req.iconID
        user = User.load(self.userID)
        roleID = user.roles.get(settings.REGION['ID'])
        if roleID:
            return fail_msg(msgtype, msgTips.FAIL_MSG_ALREADY_CREATEROLE)
        name, error = validate_name(req.name)
        if error:
            return fail_msg(msgtype, error)

        # 名字去重复
        try:
            PlayernameIndexing.register(0, name)  # 占位
            player = Player.create(name=name, modelID=modelID, sex=req.sex, level=1, career=req.school)
            player.save()
            PlayernameIndexing.pool.execute('HSET', PlayernameIndexing.key, name, player.entityID)  # 更新
        except DuplicateIndexException:
            return fail_msg(msgtype, reason=_YYTEXT('该名称已存在'))
        except EntityExistsException:  # 已经存在的entityID, 一般由于自增ID被清零,但entityID数据还存在
            return fail_msg(msgtype, reason=_YYTEXT('该名称已存在'))
        if not player or not player.entityID:
            PlayernameIndexing.unregister(name)
            return fail_msg(msgtype, reason=_YYTEXT('该名称已存在'))
        PlayerLevelRanking.update_score(player.entityID, player.level)
        user.roles[settings.REGION['ID']] = player.entityID
        user.save()
        rsp = poem_pb.CreateRoleResponse()
        rsp.roleId = player.entityID
        role = rsp.roles.add()
        role.name, role.level, role.resourceId, role.school, role.sex = \
            player.name, player.level, player.modelID, player.career, player.sex

        from common.log import gm_logger
        gm_logger.info({'createrole': {'entityID': player.entityID,
                                       'userID': self.userID,
                                       'type': 'createrole',
                                       'username': player.username,
                                       'playername': player.name,
                                       'worldID': settings.SESSION['ID'],
                                       'createrolename': player.name,
                                       'career': player.career,
                                       'username_alias': user.username_alias}})
        role.id = rsp.roleId
        return success_msg(msgtype, rsp)
Example #2
0
def create_user(request):
    req = poem_pb.RegisterRequest()
    req.ParseFromString(request.body)
    clientIP = request.env.get('REMOTE_ADDR', '')
    username = req.username
    password = req.password
    # 大小包处理
    try:
        if UsernameIndexing.exists(username):
            raise RegisterError(_YYTEXT(u'该帐号已被注册,请重新输入'))
        user = register(username, password, get_device_id(req.deviceInfo))
    except RegisterError as e:
        raise ApplicationError(0, e.message)

    info = unpack_login_info(req.deviceInfo,
                             userID=user.userID,
                             username=user.username,
                             featureCode=req.featureCode,
                             clientIP=clientIP)

    info.update({
        'userID': user.userID,
        'username': user.username,
        'type': 'register'
    })
    gm_logger.info({'sessionaccess': info})
    account_register.info(**info)

    return poem_pb.RegisterResponse(username=user.username)
Example #3
0
 def alter_name(self, msgtype, body):
     limited, message = self.access_limited()
     if limited:
         return fail_msg(msgtype, reason=message)
     req = poem_pb.AlterNameRequest()
     req.ParseFromString(body)
     entityID = req.entityID
     if not entityID:
         user = User.load(self.userID)
         entityIDs = user.roles.get(settings.REGION['ID'])
         if len(entityIDs) > 1:
             return fail_msg(msgtype, reason="未指定角色")
         if entityIDs:
             entityID = entityIDs[0]
     if not PlayerDuplicateNamesIndexing.exists(entityID):
         return fail_msg(msgtype, reason="不可修改名称")
     session = SessionStore(get_session_pool(), str(req.verify_code))
     if not req.userID or session.uid != req.userID:
         return fail_msg(msgtype, reason="登录超时,请重试")
     name, error = validate_name(req.name)
     if error:
         return fail_msg(msgtype, error)
     # 名字去重复
     try:
         PlayernameIndexing.register(0, name)  # 占位
         p = Player.simple_load(entityID, ["name"])
         p.name = name
         p.save()
         PlayernameIndexing.pool.execute(
             'HSET', PlayernameIndexing.key, name, entityID)  # 更新
     except DuplicateIndexException:
         return fail_msg(msgtype, reason=_YYTEXT('该名称已存在'))
     PlayerDuplicateNamesIndexing.unregister(entityID)
     return success_msg(msgtype, '')
Example #4
0
 def access_limited(self):
     from player.manager import g_playerManager
     if g_playerManager.count() < settings.MAX_ONLINES:
         return False, ''
     import random
     rancount = random.randint(600, 800)
     rantime = rancount / 18
     # self.peer.sender(fail_msg(msgtype, code=1000))
     return True, _YYTEXT(self.access_limited_message % (rancount, rantime))
Example #5
0
def register(username, password, imsi):
    '''
    # 注册限制暂不支持
    # f sdks.get(sdkType) and settings.REGISTERLIMIT :
    #    if imsi and not register_imei(imsi):
    #        raise RegisterError(_YYTEXT(u'您今天已注册三个账户,请明天再试。'))
    '''
    if settings.ISUSECLOSESERVERTIME:
        closetime = time.strptime(settings.CLOSEREGTIME, '%Y-%m-%d %H:%M:%S')
        curtime = time.localtime()
        if curtime > closetime:
            raise RegisterError(_YYTEXT(u'服务器维护中,请稍后再试'))

    if is_chinese(username):
        raise RegisterError(_YYTEXT(u'帐号不支持中文,请重新输入'))
    if len(username) < 6:
        raise RegisterError(_YYTEXT(u'该帐号位数不足6位,请重新输入'))
    if password != 'dummy' and len(password) < 6:
        raise RegisterError(_YYTEXT(u'密码位数不足6位,请重新输入'))
    if username.startswith("IOS"):
        raise RegisterError(_YYTEXT(u'帐号不合法,请重新输入'))
    if imsi in g_block_devices:
        raise RegisterError(_YYTEXT(u'该设备已被禁止注册,如有疑问请联系客服'))

    username = username
    if UsernameIndexing.exists(username):
        raise RegisterError(_YYTEXT(u'该帐号已被注册,请重新输入'))

    hashed = utils.make_password(password)
    try:
        UsernameIndexing.register(0, username)  # 先占位
        user = User.create(username=username, password=hashed, imsi=imsi)
        user.save()
        UsernameIndexing.pool.execute('HSET', UsernameIndexing.key, username,
                                      user.userID)  # 更新
    except DuplicateIndexException:
        raise RegisterError(_YYTEXT(u'该帐号已被注册,请重新输入'))
    except EntityExistsException:
        UsernameIndexing.unregister(username)
        raise RegisterError(_YYTEXT(u'该帐号已被注册,请重新输入'))
    except Exception as e:
        UsernameIndexing.unregister(username)
        logger.exception('register')
        raise e
    return user