Пример #1
0
        protected void TakeNext(IProcessNotify processNotify, string localFolder)
        {
            index++;
            var metaData = GetMetaData(index);

            DoDownload(metaData, processNotify, localFolder);
        }
Пример #2
0
        public static void DownloadFiles(IEnumerable <string> urls, IProcessNotify processNotify = null, long batchId = 0)
        {
            var metaDatas = urls.Select(u => new MetaData
            {
                Url = u
            }).ToArray();

            DownloadFiles(metaDatas, batchId, processNotify, Config.ReplaceExist);
        }
Пример #3
0
        public static void DownloadFile(string url, string localName, long batchId, IProcessNotify processNotify = null, bool existReplace = false)
        {
            var metaData = new MetaData
            {
                BatchId       = batchId,
                Url           = url,
                LocalFileName = localName
            };

            DownloadFile(metaData, processNotify, existReplace);
        }
Пример #4
0
        public static void DownloadFile(MetaData metaData, IProcessNotify processNotify = null, bool existReplace = false)
        {
            if (string.IsNullOrEmpty(metaData.LocalFileName))
            {
                metaData.LocalFileName = Config.GetDefaultFile(metaData.Url);
            }

            metaData.ProcessNotify = processNotify;
            metaData.ReplaceExist  = existReplace;
            datas.Add(metaData);
            autoResetEvent.Set();
        }
Пример #5
0
        private void DoDownload(MetaData metaData, IProcessNotify processNotify, string localFolder)
        {
            var fullPath = Path.Combine(localFolder, metaData.LocalFileName);

            metaData.FullPath = fullPath;
            var isExist = CheckIfExist(fullPath, metaData);

            if (isExist)
            {
                TryGoToNext(metaData, processNotify, localFolder);
                return;
            }

            DoWebDown(metaData, processNotify, localFolder, fullPath);
        }
Пример #6
0
        private void TryGoToNext(MetaData metaData, IProcessNotify processNotify, string localFolder)
        {
            var isFinshed = StepOver(index, metaData);

            if (isFinshed)
            {
                FinshedNotify(processNotify);
                Finshed?.Invoke(this);
                return;
            }
            else
            {
                TakeNext(processNotify, localFolder);
                return;
            }
        }
Пример #7
0
        private void EndResponse(WebResponse response, MetaData metaData, IProcessNotify processNotify, string loaclPath, string fullPath)
        {
            var stream      = response.GetResponseStream();
            var fs          = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
            var totalLength = response.ContentLength;

            byte[] bytes           = new byte[1024 * 512];
            var    accpectLegnth   = 0;
            Action beginReadAction = null;
            Action <IAsyncResult> endReadAction = (ar) =>
            {
                var readCount = stream.EndRead(ar);
                if (readCount == 0)
                {
                    stream.Dispose();
                    fs.Flush();
                    fs.Dispose();
                    response.Close();
                    TryGoToNext(metaData, processNotify, loaclPath);
                }
                else
                {
                    accpectLegnth += readCount;
                    processNotify?.Progress(metaData, accpectLegnth, totalLength, (int)(accpectLegnth / totalLength));
                    fs.Write(bytes, 0, readCount);
                    fs.Flush();
                    beginReadAction.Invoke();
                }
            };

            beginReadAction = () =>
            {
                stream.BeginRead(bytes, 0, bytes.Length, (ar) => {
                    endReadAction.Invoke(ar);
                }, null);
            };

            beginReadAction.Invoke();
        }
Пример #8
0
        private void DoWebDown(MetaData metaData, IProcessNotify processNotify, string loaclPath, string fullPath)
        {
            HttpWebRequest request = null;

            try {
                request = (HttpWebRequest)WebRequest.Create(metaData.Url);
            }
            catch (Exception ex)
            {
                try
                {
                    processNotify?.Error(ex, metaData);
                    return;
                }
                finally
                {
                    Finshed?.Invoke(this);
                }
            }

            request.BeginGetResponse(ar => {
                try
                {
                    var response = request.EndGetResponse(ar);
                    EndResponse(response, metaData, processNotify, loaclPath, fullPath);
                }
                catch (Exception ex)
                {
                    try
                    {
                        processNotify?.Error(ex, metaData);
                    }
                    finally
                    {
                        Finshed?.Invoke(this);
                    }
                }
            }, null);
        }
Пример #9
0
 protected override void FinshedNotify(IProcessNotify processNotify)
 {
     processNotify?.BatchSucceed(batchId, datas);
 }
Пример #10
0
 protected override void FinshedNotify(IProcessNotify processNotify)
 {
     processNotify?.Succeed(metaData);
 }
Пример #11
0
        internal void StartDown(IProcessNotify processNotify, string localFolder)
        {
            var metaData = GetMetaData(index);

            DoDownload(metaData, processNotify, localFolder);
        }
Пример #12
0
 protected abstract void FinshedNotify(IProcessNotify processNotify);
Пример #13
0
        public static void DownloadFiles(IEnumerable <MetaData> metaDatas, long batchId = 0, IProcessNotify processNotify = null, bool existReplace = false)
        {
            foreach (var metaData in metaDatas)
            {
                if (string.IsNullOrEmpty(metaData.LocalFileName))
                {
                    metaData.LocalFileName = Config.GetDefaultFile(metaData.Url);
                }

                metaData.BatchId       = batchId;
                metaData.ProcessNotify = processNotify;
                metaData.ReplaceExist  = existReplace;
                datas.Add(metaData);
            }

            autoResetEvent.Set();
        }
Пример #14
0
 public static void DownloadFile(string url, long id, IProcessNotify processNotify)
 {
     DownloadFile(url, string.Empty, id, processNotify, Config.ReplaceExist);
 }