private void MonitorSessions(object data)
{
try
{
// Utils.Trace("Server: Session Monitor Thread Started.");
int sleepCycle = Convert.ToInt32(data, CultureInfo.InvariantCulture);
do
{
Session[] sessions = null;
lock (m_lock)
{
// check if halted.
if (m_monitoringThread == null)
{
return;
}
sessions = new Session[m_sessions.Count];
m_sessions.Values.CopyTo(sessions, 0);
}
for (int ii = 0; ii < sessions.Length; ii++)
{
if (sessions[ii].HasExpired)
{
// update diagnostics.
lock (m_server.DiagnosticsLock)
{
m_server.ServerDiagnostics.SessionTimeoutCount++;
}
m_server.CloseSession(null, sessions[ii].Id, false);
}
}
if (m_shutdownEvent.WaitOne(sleepCycle, false))
{
Utils.Trace("Server: Session Monitor Thread Exited Normally.");
break;
}
}
while (true);
}
catch (Exception e)
{
Utils.Trace(e, "Server: Session Monitor Thread Exited Unexpectedly");
}
}
#endregion