public void Stop() { SessionStart = DateTime.Now; SessionLength = SessionStop.Subtract(SessionStart).TotalSeconds; }
private static void ExecuteMonitor(object state) { List <Session> ToDispose = new List <Session>(); List <Session> ToStop = new List <Session>(); lock (mSessions) { lock (mSessionsToStop) { foreach (uint SessionId in mSessionsToStop) { if (mSessions.ContainsKey(SessionId)) { ToStop.Add(mSessions[SessionId]); } } mSessionsToStop.Clear(); } foreach (Session Session in mSessions.Values) { if (ToStop.Contains(Session)) { continue; } if (Session.Stopped) { if (Session.TimeStopped > 15) { ToDispose.Add(Session); } continue; } } } if (ToStop.Count > 0) { using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { foreach (Session SessionStop in ToStop) { SessionStop.Stop(MySqlClient); } } } foreach (Session SessionDispose in ToDispose) { SessionDispose.Dispose(); lock (mSessions) { if (mSessions.ContainsKey(SessionDispose.Id)) { mSessions.Remove(SessionDispose.Id); } } } }
private static void ExecuteMonitor() { try { while (Program.Alive) { List <Session> ToDispose = new List <Session>(); List <Session> ToStop = new List <Session>(); lock (mSessions) { lock (mSessionsToStop) { foreach (uint SessionId in mSessionsToStop) { if (mSessions.ContainsKey(SessionId)) { ToStop.Add(mSessions[SessionId]); } } mSessionsToStop.Clear(); } foreach (Session Session in mSessions.Values) { if (ToStop.Contains(Session)) { continue; } if (Session.Stopped) { if (Session.TimeStopped > 15) { ToDispose.Add(Session); } continue; } } } if (ToStop.Count > 0) { using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { foreach (Session SessionStop in ToStop) { SessionStop.Stop(MySqlClient); } } } foreach (Session SessionDispose in ToDispose) { SessionDispose.Dispose(); lock (mSessions) { if (mSessions.ContainsKey(SessionDispose.Id)) { mSessions.Remove(SessionDispose.Id); } } } Thread.Sleep(100); } } catch (ThreadAbortException) { } catch (ThreadInterruptedException) { } }