示例#1
0
        public virtual ValidationResult Validate()
        {
            int orGenerateAppToken = SingletonComponent <ServerMgr> .Instance.persistance.GetOrGenerateAppToken(Request.playerId);

            if (Request.playerId == 0L || Request.playerToken != orGenerateAppToken)
            {
                return(ValidationResult.NotFound);
            }
            if ((ServerUsers.Get(Request.playerId)?.group ?? ServerUsers.UserGroup.None) == ServerUsers.UserGroup.Banned)
            {
                return(ValidationResult.Banned);
            }
            TokenBucket tokenBucket = _playerBuckets?.Get(Request.playerId);

            if (tokenBucket == null || !tokenBucket.TryTake(TokenCost))
            {
                if (tokenBucket == null || !tokenBucket.IsNaughty)
                {
                    return(ValidationResult.RateLimit);
                }
                return(ValidationResult.Rejected);
            }
            UserId = Request.playerId;
            Player = BasePlayer.FindByID(UserId) ?? BasePlayer.FindSleeping(UserId);
            Client.Subscribe(new PlayerTarget(UserId));
            return(ValidationResult.Success);
        }