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)
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)
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, '')
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))
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