private void KickIdlingPlayers(object state) { RunCatchLog(() => { DateTime now = DateTime.Now; IEnumerable <KeyValuePair <string, DateTime> > loginsToKick; lock (_readWriteLockObject) { loginsToKick = LoginTimes.Where(loginTime => (now - loginTime.Value).TotalSeconds >= Settings.SecondsCount && !LoginHasRight(loginTime.Key, false, "NoIdleKick")); } foreach (KeyValuePair <string, DateTime> loginTime in loginsToKick) { if (!Settings.KickSpectators) { PlayerSettings playerSettings = GetPlayerSettings(loginTime.Key); if (playerSettings == null || playerSettings.SpectatorStatus.IsSpectator) { ResetLoginsTime(loginTime.Key); continue; } } KickLogin(loginTime.Key); } }, "Error in KickIdlingPlayers Method.", true); }
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); }