private void Callbacks_PlayerDisconnect(object sender, PlayerDisconnectEventArgs e) { RunCatchLog(() => { lock (_readWriteLockObject) { LoginRounds.Remove(e.Login); LoginTimes.Remove(e.Login); } }, "Error in Callbacks_PlayerDisconnect Method.", true); }
private void IncreaseLoginRounds(string login) { lock (_readWriteLockObject) { if (!LoginRounds.ContainsKey(login)) { LoginRounds[login] = 0; } LoginRounds[login] += 1; } }
private void Callbacks_BeginRace(object sender, BeginRaceEventArgs e) { RunCatchLog(() => { if (Settings.KickMode != IdleKickMode.ROUNDS) { return; } List <KeyValuePair <string, uint> > loginsToKick; lock (_readWriteLockObject) { foreach (string login in LoginRounds.Keys.ToArray()) { IncreaseLoginRounds(login); } loginsToKick = LoginRounds.Where(loginRound => loginRound.Value >= Settings.RoundsCount && !LoginHasRight(loginRound.Key, false, "NoIdleKick")).ToList(); } foreach (KeyValuePair <string, uint> loginRound in loginsToKick) { if (!Settings.KickSpectators) { PlayerSettings playerSettings = GetPlayerSettings(loginRound.Key); if (playerSettings == null || playerSettings.SpectatorStatus.IsSpectator) { ResetLoginRounds(loginRound.Key); continue; } } KickLogin(loginRound.Key); } }, "Error in Callbacks_BeginChallenge Method.", true); }