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); }