private async void cd_Completed(object sender, EventArgs e) { if (Info.ContentSize < 1) { Status = HttpDownloaderStatus.MergingFiles; Directory.CreateDirectory(SaveDir); File.Delete(this.FilePath); File.Move(Ranges[0].FilePath, this.FilePath); Progress = 100; Status = HttpDownloaderStatus.Completed; Completed.Raise(this, EventArgs.Empty, aop); } else if (Ranges.All(x => x.IsDownloaded) && Ranges.All(x => x.IsIdle) && TotalBytesReceived == Info.ContentSize && !flagMerged) { Directory.CreateDirectory(SaveDir); flagMerged = true; Progress = 100; Status = HttpDownloaderStatus.MergingFiles; await MergePartialFiles(); ProgressChanged.Raise(this, new ProgressChangedEventArgs(Progress), aop); Status = HttpDownloaderStatus.Completed; Completed.Raise(this, EventArgs.Empty, aop); } else { createNewThreadIfRequired(); } }
private void Process() { try { if (Info == null) { State = Status.GettingHeaders; GetHeaders(); aop.Post(delegate { DownloadInfoReceived.Raise(this, EventArgs.Empty); }, null); } var append = RemainingRangeStart > 0; var bytesRead = 0; var buffer = new byte[2 * 1024]; State = Status.SendingRequest; using (var response = RequestHelper.CreateRequestGetResponse(Info, RemainingRangeStart, BeforeSendingRequest, AfterGettingResponse)) { State = Status.GettingResponse; using (var responseStream = response.GetResponseStream()) using (var file = FileHelper.CheckFile(FullFileName, append)) { while (allowDownload && (bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) { State = Status.Downloading; file.Write(buffer, 0, bytesRead); TotalBytesReceived += bytesRead; speedBytesTotal += bytesRead; aop.Post(delegate { ProgressChanged.Raise(this, new ProgressChangedEventArgs(SpeedInBytes, this.Progress, TotalBytesReceived)); }, Progress); } } } if (RemainingRangeStart > Info.Length) { throw new Exception("Total bytes received overflows content length"); } if (TotalBytesReceived == Info.Length) { State = Status.Completed; DownloadCompleted.Raise(this, EventArgs.Empty); } else if (!allowDownload) { State = Status.Paused; } } catch (Exception ex) { State = Status.ErrorOccured; aop.Post(delegate { ErrorOccured.Raise(this, new ErrorEventArgs(ex)); }, null); } }
private void cd_ProgressChanged(object sender, EventArgs e) { double prnew = 0; if (Info != null && Info.ContentSize > 0) { prnew = double.Parse((TotalBytesReceived * 100d / Info.ContentSize).ToString("0.00")); } else { prnew = 0; } Speed = (long)((TotalBytesReceived - speedBytesOffset) / stp.Elapsed.TotalSeconds); if (Progress == 0 || prnew != Progress) { Status = HttpDownloaderStatus.Downloading; Progress = prnew; ProgressChanged.Raise(this, new ProgressChangedEventArgs(Progress), aop); } }
private void Process() { try { //Get the download headers if not exists if (Info == null) { State = Status.GettingHeaders; GetHeaders(); aop.Post(delegate { DownloadInfoReceived.Raise(this, EventArgs.Empty); }, null); } //Gets where download left var append = RemainingRangeStart > 0; var bytesRead = 0; var buffer = new byte[2 * 1024]; State = Status.SendingRequest; using (var response = RequestHelper.CreateRequestGetResponse(Info, RemainingRangeStart, BeforeSendingRequest, AfterGettingResponse, Info.IsChunked)) { State = Status.GettingResponse; using (var responseStream = response.GetResponseStream()) using (var file = FileHelper.CheckFile(FullFileName, append, LastMD5Checksum)) { while (allowDownload && (bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) { State = Status.Downloading; file.Write(buffer, 0, bytesRead); TotalBytesReceived += bytesRead; speedBytesTotal += bytesRead; aop.Post(delegate { ProgressChanged.Raise(this, new ProgressChangedEventArgs(SpeedInBytes, this.Progress, TotalBytesReceived)); }, Progress); } } } if (Info.Length > 0 && RemainingRangeStart > Info.Length) { throw new Exception("Total bytes received overflows content length"); } if (TotalBytesReceived == Info.Length || (Info.Length < 1 && allowDownload)) { State = Status.Completed; DownloadCompleted.Raise(this, EventArgs.Empty); } else if (!allowDownload) { State = Status.Paused; DownloadPaused.Raise(this, EventArgs.Empty); } } catch (Exception ex) { if (TotalBytesReceived == Info.Length) { State = Status.Completed; DownloadCompleted.Raise(this, EventArgs.Empty); } else if (!allowDownload) { State = Status.Paused; DownloadPaused.Raise(this, EventArgs.Empty); } else { LastError = ex; State = Status.ErrorOccured; aop.Post(delegate { ErrorOccured.Raise(this, new ErrorEventArgs(ex)); }, null); } } finally { if (LastError == null || !(LastError is FileValidationFailedException)) { LastMD5Checksum = FileHelper.CalculateMD5(FullFileName); } } }
protected void FireProgressChangedEvent(double currentProgress) { var args = new OperationProgressChangedEventArgs(currentProgress); ProgressChanged.Raise(this, args); }
public void Progress(int progress) { ProgressChanged.Raise(this, new ProgressEventArgs(progress)); }
void DownloadProcedure() { try { var endOfStream = false; var stOffset = Range.Remaining.Start; var chunkEndOffset = stOffset + 1 * 1024 * 1000 - 1; var endOffset = UseChunk ? Math.Min(chunkEndOffset, Range.End) : Range.End; Range.Status = Status = State.SendRequest; Range.LastTry = DateTime.Now; request = Info != null? HttpRequestHelper.CreateHttpRequest(Info, stOffset, endOffset, BeforeSendingRequest) : HttpRequestHelper.CreateHttpRequest(Url, BeforeSendingRequest, true); Range.Status = Status = State.GetResponse; using (var response = Info != null ? HttpRequestHelper.GetRangedResponse(Info, stOffset, endOffset, request, AfterGettingResponse) : request.GetResponse() as HttpWebResponse) { Range.Status = Status = State.GetResponseStream; ResponseReceived.Raise(this, new ResponseReceivedEventArgs(response)); while (Wait) { Thread.Sleep(100); } using (fileStream = FileHelper.CheckFile(Range.FilePath, Range.TotalBytesReceived > 0)) { using (var str = response.GetResponseStream()) { var buffer = new byte[10 * 1024]; var bytesRead = 0; while (true) { if (str != null) { bytesRead = str.Read(buffer, 0, buffer.Length); } if (Info.ContentSize > 0) { bytesRead = (int)Math.Min(Range.Size - Range.TotalBytesReceived, bytesRead); } if (bytesRead <= 0) { endOfStream = true; break; } if (stopFlag) { break; } if (Info != null && Info.ContentSize > 0 && Range.IsDownloaded) { break; } Range.Status = Status = State.Downloading; fileStream.Write(buffer, 0, bytesRead); Range.TotalBytesReceived += bytesRead; ProgressChanged.Raise(this, EventArgs.Empty); } } } } lock (GlobalLock.Locker) { Range.LastTry = DateTime.Now; if ((!stopFlag && endOfStream && Info.ContentSize < 1) || (Info.ContentSize > 0 && Range.IsDownloaded)) { Range.Status = Status = State.Completed; Completed.Raise(this, EventArgs.Empty); } else if (stopFlag) { Range.Status = Status = State.Stopped; Stopped.Raise(this, EventArgs.Empty); } } } catch (Exception ex) { lock (GlobalLock.Locker) { Range.LastTry = DateTime.Now; if (Info != null && Info.ContentSize > 0 && Range.IsDownloaded) { Range.Status = Status = State.Completed; Completed.Raise(this, EventArgs.Empty); } else if (stopFlag) { Range.Status = Status = State.Stopped; Stopped.Raise(this, EventArgs.Empty); } else { Range.Status = Status = State.Failed; Failed.Raise(this, new ErrorEventArgs(ex)); } } } finally { if (request != null) { request.Abort(); } if (!Range.IsIdle) { Range.Status = Status = State.Failed; } } }