protected void TakeNext(IProcessNotify processNotify, string localFolder) { index++; var metaData = GetMetaData(index); DoDownload(metaData, processNotify, localFolder); }
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); }
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); }
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(); }
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); }
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; } }
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(); }
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); }
protected override void FinshedNotify(IProcessNotify processNotify) { processNotify?.BatchSucceed(batchId, datas); }
protected override void FinshedNotify(IProcessNotify processNotify) { processNotify?.Succeed(metaData); }
internal void StartDown(IProcessNotify processNotify, string localFolder) { var metaData = GetMetaData(index); DoDownload(metaData, processNotify, localFolder); }
protected abstract void FinshedNotify(IProcessNotify processNotify);
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(); }
public static void DownloadFile(string url, long id, IProcessNotify processNotify) { DownloadFile(url, string.Empty, id, processNotify, Config.ReplaceExist); }