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);
}
}
}