Opc.Ua.Server.SessionManager.MonitorSessions C# (CSharp) Method

MonitorSessions() private method

Periodically checks if the sessions have timed out.
private MonitorSessions ( object data ) : void
data object
return void
        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