AjaxLife.AjaxLife.timecheck C# (CSharp) Метод

timecheck() публичный Метод

public timecheck ( object sender, System e ) : void
sender object
e System
Результат void
        void timecheck(object sender, System.Timers.ElapsedEventArgs e)
        {
            lock (Users)
            {
                Queue<Guid> marked = new Queue<Guid>();
                try
                {
                    foreach (KeyValuePair<Guid,User> entry in Users)
                    {
                        User user = entry.Value;
                        Guid session = (Guid)entry.Key;
                        DateTime lastrequest = user.LastRequest;
                        if (lastrequest.CompareTo(DateTime.Now.AddSeconds(-SESSION_TIMEOUT)) < 0)
                        {
                            marked.Enqueue(session);
                            Console.WriteLine("Marked session ID " + session.ToString("D") + " for deletion.");
                        }
                    }
                    lock (Users)
                    {
                        while (marked.Count > 0)
                        {
                            Guid todie = marked.Dequeue();
                            User user = Users[todie];
                            if (user.Client != null && user.Client.Network.Connected)
                            {
                                if (user.Events != null)
                                {
                                    user.Events.Network_Disconnected(this, new DisconnectedEventArgs(NetworkManager.DisconnectType.ServerInitiated, "Your AjaxLife session has timed out."));
                                    Console.WriteLine("Transmitted logout alert to "+user.Client.Self.FirstName+" "+user.Client.Self.LastName+". Waiting...");
                                    System.Threading.Thread.Sleep(1000);
                                    user.Events.deactivate();
                                }
                                Console.WriteLine("Disconnecting " + user.Client.Self.FirstName + " " + user.Client.Self.LastName + "...");
                                user.Client.Network.Logout();
                                System.Threading.Thread.Sleep(2000);
                            }
                            Users.Remove(todie);
                            Console.WriteLine("Deleted " + todie);
                        }
                    }
                }
                catch(Exception exception)
                {
                    Console.WriteLine("Error processing timeouts: " + exception.Message);
                }
            }
        }