예제 #1
0
 public void Stop()
 {
     SessionStart  = DateTime.Now;
     SessionLength = SessionStop.Subtract(SessionStart).TotalSeconds;
 }
예제 #2
0
        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);
                    }
                }
            }
        }
예제 #3
0
        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) { }
        }