public void Download(DownloadItemBase item)
        {
            if (!LazyInit)
            {
                LazyInit       = true;
                _lastConnected = true;
            }

            lock (_downloadListLock)
            {
                _downloadList.Enqueue(item);
            }

            var info = new DownloadManagerInfo
            {
                FlushSizeKB   = FlushSizeKB,
                TimeoutSecond = TimeoutSecond,
            };

            item.InitManagerInfo(info);

            item.InitManagerHandler(status =>
            {
                if (_downloadingList.ContainsKey(item))
                {
                    var download = _downloadingList[item];
                    var state    = DownloadState.None;
                    switch (status.State)
                    {
                    case DownloadState.Update:
                        item.SendStatusToUser();
                        state = DownloadState.Update;
                        break;

                    case DownloadState.Success:
                        item.SendStatusToUser();
                        state = DownloadState.WaitToRemove;
                        break;

                    case DownloadState.Error:
                        item.SendStatusToUser();
                        // block error to wait reconnection
                        state = DownloadState.Error;
                        break;
                    }

                    download.State = state;
                }
            });
        }
 public override void InitManagerInfo(DownloadManagerInfo info)
 {
     _flushSizeKB   = info.FlushSizeKB;
     _timeoutSecond = info.TimeoutSecond;
 }
 public virtual void InitManagerInfo(DownloadManagerInfo info)
 {
 }
 public override void InitManagerInfo(DownloadManagerInfo info)
 {
     Timeout = info.TimeoutSecond;
 }