private void Session_KeepAlive(Session session, KeepAliveEventArgs e)
{
int missedKeepAlives = 0;
lock (m_lock)
{
// check if the session is closed.
if (!m_running || !Object.ReferenceEquals(m_session, session))
{
return;
}
// check if everything is ok.
if (ServiceResult.IsGood(e.Status))
{
m_missedKeepAlives = 0;
m_lastKeepAliveTime = DateTime.UtcNow;
return;
}
// increment miss count.
missedKeepAlives = ++m_missedKeepAlives;
}
// attempt to reconnect after two misses.
if (missedKeepAlives == 2)
{
ThreadPool.QueueUserWorkItem(OnReconnectSession, session);
Utils.Trace("Calling OnReconnectSession NOW.");
}
}