private void WatchThread()
{
try
{
var stopwatch = new Stopwatch();
var now = DateTime.Today;
lock (_thisLock)
{
foreach (var item in _settings.UploadTransferSizeList.ToArray())
{
if ((now - item.Key).TotalDays >= _settings.TransferLimit.Span)
{
_settings.UploadTransferSizeList.Remove(item.Key);
}
}
foreach (var item in _settings.DownloadTransferSizeList.ToArray())
{
if ((now - item.Key).TotalDays >= _settings.TransferLimit.Span)
{
_settings.DownloadTransferSizeList.Remove(item.Key);
}
}
}
for (;;)
{
Thread.Sleep(1000 * 1);
if (this.State == ManagerState.Stop) return;
if (!stopwatch.IsRunning || stopwatch.ElapsedMilliseconds > 1000 * 20)
{
stopwatch.Restart();
if (now != DateTime.Today)
{
now = DateTime.Today;
lock (_thisLock)
{
foreach (var item in _settings.UploadTransferSizeList.ToArray())
{
if ((now - item.Key).TotalDays >= _settings.TransferLimit.Span)
{
_settings.UploadTransferSizeList.Remove(item.Key);
}
}
foreach (var item in _settings.DownloadTransferSizeList.ToArray())
{
if ((now - item.Key).TotalDays >= _settings.TransferLimit.Span)
{
_settings.DownloadTransferSizeList.Remove(item.Key);
}
}
_uploadSize = -_amoebaManager.SentByteCount;
_downloadSize = -_amoebaManager.ReceivedByteCount;
}
if (_amoebaManager.State == ManagerState.Stop) this.OnStartEvent();
}
else
{
lock (_thisLock)
{
_settings.UploadTransferSizeList[now] = _uploadSize + _amoebaManager.SentByteCount;
_settings.DownloadTransferSizeList[now] = _downloadSize + _amoebaManager.ReceivedByteCount;
}
}
if (_settings.TransferLimit.Type == TransferLimitType.Uploads)
{
var totalUploadSize = _settings.UploadTransferSizeList.Sum(n => n.Value);
if (totalUploadSize > _settings.TransferLimit.Size)
{
if (_amoebaManager.State == ManagerState.Start) this.OnStopEvent();
}
}
else if (_settings.TransferLimit.Type == TransferLimitType.Downloads)
{
var totalDownloadSize = _settings.DownloadTransferSizeList.Sum(n => n.Value);
if (totalDownloadSize > _settings.TransferLimit.Size)
{
if (_amoebaManager.State == ManagerState.Start) this.OnStopEvent();
}
}
else if (_settings.TransferLimit.Type == TransferLimitType.Total)
{
var totalUploadSize = _settings.UploadTransferSizeList.Sum(n => n.Value);
var totalDownloadSize = _settings.DownloadTransferSizeList.Sum(n => n.Value);
if ((totalUploadSize + totalDownloadSize) > _settings.TransferLimit.Size)
{
if (_amoebaManager.State == ManagerState.Start) this.OnStopEvent();
}
}
}
}
}
catch (Exception e)
{
Log.Error(e);
}
}