public void Process() { if (!m_IsEstablished && DateTime.Now.Subtract(m_ConnectedSince).TotalSeconds >= Constants.ConnectTimeout) { Disconnect(); return; } try { m_SendingQueue.Lock(); for (int n = m_SendingQueue.Count - 1; n >= 0; n--) { if (DateTime.Now.Subtract(m_SendingQueue[n].Value).TotalSeconds >= Constants.CommandTimeout) { m_SendingQueue.RemoveAt(n); } } } finally { m_SendingQueue.Unlock(); } try { Core.Connections.Lock(); if (bool.Parse(m_Settings["HasDownloadLimit"]) && int.Parse(m_Settings["DownloadLimit"]) > 0 && Core.Connections.Count != 0) { m_DownloadLimit = Math.Max(m_DownloadLimitUsed + m_DownloadAdjustment, (int)((float)int.Parse(m_Settings["DownloadLimit"]) / Core.Connections.Count)); } else { m_DownloadLimit = 0; } m_DownloadLimitUsed = 0; m_ReceivingResetEvent.Set(); if (bool.Parse(m_Settings["HasUploadLimit"]) && int.Parse(m_Settings["UploadLimit"]) > 0 && Core.Connections.Count != 0) { m_UploadLimit = Math.Max(m_UploadLimitUsed + m_UploadAdjustment, (int)((float)int.Parse(m_Settings["UploadLimit"]) / Core.Connections.Count)); } else { m_UploadLimit = 0; } m_UploadLimitUsed = 0; m_SendingResetEvent.Set(); } finally { Core.Connections.Unlock(); } }