예제 #1
0
 private void btnStart_Click(object sender, EventArgs e)
 {
     httpDownloader = new HttpDownloader(txtUrl.Text, $"{Application.StartupPath}\\{Path.GetFileName(txtUrl.Text)}");
     httpDownloader.DownloadCompleted += HttpDownloader_DownloadCompleted;
     httpDownloader.ProgressChanged   += HttpDownloader_ProgressChanged;
     httpDownloader.Start();
 }
예제 #2
0
        public void TestDownloader()
        {
            var zipUrl = "http://www.baidu.com";
//            var zipUrl = "http://dzp79b220mp4w.cloudfront.net/g1-resources-package/trunk/g1.resources.trunk.1.4.0.0.zip"; // very slow, 弱网络
            var downloader = new HttpDownloader(zipUrl, "test_download.html");

            downloader.SetStepCallback(
                (ab) =>
            {
                Console.WriteLine(string.Format("Downloader progress: {0}", downloader.Progress));
            });
            downloader.Start();
            var lastProgress = 0d;

            while (!downloader.IsFinished)
            {
                var progress = downloader.Progress;
                if (!lastProgress.Equals(progress))
                {
                    //		        Assert.True(progress > 0);
                    //		        Assert.True(progress < 1);
//                    Console.WriteLine("Progress: {0}", progress);
                    lastProgress = progress;
                }
                Thread.Sleep(1);
            }

            Assert.False(downloader.IsError);
            Assert.True(File.Exists("test_download.html"));
        }
예제 #3
0
 private void baixarFila(object sender, EventArgs e, String linha)
 {
     httpDownloader = new HttpDownloader(linha, $"{Application.StartupPath}\\{Path.GetFileName(linha)}");
     httpDownloader.DownloadCompleted += HttpDownloader_DownloadCompleted;
     httpDownloader.ProgressChanged   += HttpDownloader_ProgressChanged;
     httpDownloader.Start();
 }
 private void Start_btn_Click(object sender, EventArgs e)
 {
     httpdownloader = new HttpDownloader(url_txtbox.Text, $"{Application.StartupPath}\\{Path.GetFileName(url_txtbox.Text)}");
     httpdownloader.DownloadCompleted += HttpDownloader_DownloadComplete;
     httpdownloader.ProgressChanged   += HttpDownloader_ProgressChanged;
     httpdownloader.Start();
     Start_btn.Enabled  = false;
     resume_btn.Enabled = true;
     pause_btn.Enabled  = true;
 }
        private void BtnCapNhat_Click(object sender, RoutedEventArgs e)
        {
            lblSpeed.Content     = "Đang kết nối, vui lòng đợi . . .";
            btnCapNhat.IsEnabled = false;
            var urlSetup = "https://github.com/duongvanson/ss/raw/master/SetupStudentSocial.msi";

            downloader = new HttpDownloader(urlSetup, setup);
            downloader.DownloadProgressChanged += Downloader_DownloadProgressChanged;;
            downloader.DownloadCompleted       += Downloader_DownloadCompleted;;
            downloader.Start();
        }
예제 #6
0
        private void OnHeaderRequestFinish(HttpRequester req)
        {
            if (req.IsError)
            {
                Error      = req.Error;
                IsFinished = true;
                return;
            }

            using (req)
            {
                var lastModified = req.Response.LastModified;
                // md5(savepath) to save the last modified time
                var metaKey = SavePath;
                _metaFilePath = Path.Combine(_pullerMetaFolderPath, Md5Helper.Md5String(metaKey));

                // no handle for UTC or time zone
                DateTime metaFileDateTime = DateTime.MinValue;
                if (File.Exists(_metaFilePath))
                {
                    long metaFileTicks;
                    var  metaFileTicksStr = File.ReadAllText(_metaFilePath);
                    if (!long.TryParse(metaFileTicksStr, out metaFileTicks))
                    {
                        Error      = new Exception("meta file ticks parse error");
                        IsFinished = true;
                        return;
                    }

                    metaFileDateTime = new DateTime(metaFileTicks);
                }

                _currentLastModifiedUtc = lastModified.ToUniversalTime();
                HasDownloaded           = _currentLastModifiedUtc != metaFileDateTime || !File.Exists(SavePath);

                if (HasDownloaded)
                {
                    // do download
                    _downloader = new HttpDownloader(_url, SavePath);
                    _downloader.SetFinishCallback(OnDownloadFinish);
                    _downloader.Start();
                }
                else
                {
                    // no modified, ignore!
                    IsFinished = true;
                }
            }
        }
예제 #7
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            var url             = txtUrl.Text;
            var defaultFolder   = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            var defaultFileName = "default.unknown";
            var defaultSavePath = Path.Combine(defaultFolder, defaultFileName);

            downloader = new HttpDownloader(url, defaultSavePath);
            downloader.StatusChanged        += downloader_StatusChanged;
            downloader.DownloadInfoReceived += downloader_DownloadInfoReceived;
            downloader.DownloadCompleted    += downloader_DownloadCompleted;
            downloader.ProgressChanged      += downloader_ProgressChanged;
            downloader.ErrorOccured         += downloader_ErrorOccured;
            btnStart.Enabled = false;
            downloader.Start();;
        }
예제 #8
0
        public string DownloadFile(string url, string fileName)
        {
            var targetPath = Path.Combine(Path.GetTempPath(), "UpdateAutomagic");

            if (!Directory.Exists(targetPath))
            {
                Directory.CreateDirectory(targetPath);
            }

            var targetFilePath = Path.Combine(targetPath, fileName);

            HttpDownloader downloader = new HttpDownloader(url, targetFilePath);

            downloader.DownloadProgressChanged += Download_progress_change;
            downloader.DownloadCompleted       += download_completed;
            downloader.DownloadErrorOccured    += Download_error;

            downloader.Start();
            return(targetFilePath);
        }
예제 #9
0
        public void TestContinue()
        {
            var zipUrl = "http://sjres.icantw.com/g1-resources-package/trunk/g1.resources.trunk.1.3.0.3.zip";
//            var zipUrl = "http://dzp79b220mp4w.cloudfront.net/g1-resources-package/trunk/g1.resources.trunk.1.4.0.0.zip"; // very slow, 弱网络
            var savePath = "test_continue.zip";

            if (File.Exists(savePath))
            {
                File.Delete(savePath);
            }

            var downloader = new HttpDownloader(zipUrl, savePath, true);

            downloader.Start();

            Thread.Sleep(2000);
            downloader.Cancel();
            Console.WriteLine("Canceled! Now : {0}B/{1}B, {2}%", downloader.DownloadedSize, downloader.TotalSize,
                              downloader.Progress * 100d);


            Assert.True(File.Exists(savePath + ".download"));
            Assert.True(!File.Exists(savePath));


            Console.WriteLine("Start continue downloader...");
            downloader = new HttpDownloader(zipUrl, savePath, true);
            downloader.Start();

            while (!downloader.IsFinished)
            {
                Console.WriteLine("Continue! Now : {0}B/{1}B, {2}%", downloader.DownloadedSize, downloader.TotalSize,
                                  downloader.Progress * 100d);
                Thread.Sleep(50);
            }

            Console.WriteLine("Finish! Now : {0}B/{1}B, {2}%", downloader.DownloadedSize, downloader.TotalSize,
                              downloader.Progress * 100d);
            Assert.True(!File.Exists(savePath + ".download"));
            Assert.True(File.Exists(savePath));
        }
예제 #10
0
 void AltoHttpDemoForm_Load(object sender, EventArgs e)
 {
     if (Program.MSG != null)
     {
         var url = Program.MSG.Url;
         txtUrl.Text    = url;
         txtUrl.Enabled = false;
         var defaultFolder   = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
         var defaultFileName = "default.unknown";
         var defaultSavePath = Path.Combine(defaultFolder, defaultFileName);
         downloader = new HttpDownloader(url, defaultSavePath);
         downloader.StatusChanged        += downloader_StatusChanged;
         downloader.DownloadInfoReceived += downloader_DownloadInfoReceived;
         downloader.DownloadCompleted    += downloader_DownloadCompleted;
         downloader.BeforeSendingRequest += downloader_BeforeSendingRequest;
         downloader.ProgressChanged      += downloader_ProgressChanged;
         downloader.ErrorOccured         += downloader_ErrorOccured;
         btnStart.Enabled         = false;
         btnPuaseOrResume.Enabled = false;
         downloader.Start();
     }
 }
예제 #11
0
        private void StartBtn_Click(object sender, EventArgs e)
        {
            try
            {
                // Downloading the file
                linkToFileFolder.Visible = false;
                downloader = new HttpDownloader(file, outputpath);

                downloader.DownloadCompleted    += Downloader_DownloadCompleted;
                downloader.ProgressChanged      += Downloader_ProgressChanged;
                downloader.DownloadInfoReceived += Downloader_DownloadInfoReceived;
                if (string.IsNullOrEmpty(UrlBox.Text) && string.IsNullOrEmpty(savingTxtbox.Text))
                {
                    MessageBox.Show("Fields can't be empty!", "Error");
                    UrlBox.Focus();
                    return;
                }
                else
                {
                    downloader.Start();
                    if (isResume == false)
                    {
                        supportResumeLbl.Text = "No";
                        PauseBtn.Enabled      = false;
                        ResumeBtn.Enabled     = false;
                    }
                    else
                    {
                        supportResumeLbl.Text = "Yes";
                        PauseBtn.Enabled      = true;
                        ResumeBtn.Enabled     = true;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"An error appear: {ex.Message}", "Erorr", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        protected internal override void Start()
        {
            // construct the url
            var url = new StringBuilder();

            url.Append(_urlPrefix);
            if (url[url.Length - 1] != '/')
            {
                url.Append('/');
            }

            // zip file name
            var fileName = string.Format("{0}.{1}-{2}{3}", _packageNamePrefix, _checkVersionHandler.LocalVersion,
                                         _checkVersionHandler.RemoteVersion,
                                         _packageExtension);

            url.AppendFormat(fileName);

            // ���̵�ַ
            var savePath = Path.Combine(_downloadToPath, fileName);

            _savePath = savePath;
            _fullUrl  = url.ToString();

            _down = new HttpDownloader(_fullUrl, _savePath, true);
            _down.SetRequsterAsyncHook(_requesterAsyncHook);
            _down.SetFinishCallback((_) =>
            {
                if (_.Error != null)
                {
                    OnError(this, string.Format("{0} : {1}", _fullUrl, _.Error.Message));
                }

                Finish();
            });

            _down.Start();
        }
예제 #13
0
        private void Download()
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Download Url is empty");
                return;
            }

            var dlg = new SaveFileDialog();

            dlg.FileName    = "download.dat";
            dlg.Filter      = "Download File(*.dat)|*.dat|*|*.*";
            dlg.FilterIndex = 1;
            if (dlg.ShowDialog() != DialogResult.OK)
            {
                dlg.Dispose();
                return;
            }
            var file = dlg.FileName;

            dlg.Dispose();

            if (string.IsNullOrEmpty(file))
            {
                return;
            }

            downloader_ = new HttpDownloader();
            downloader_.download_url  = textBox1.Text;
            downloader_.savefilepath  = dlg.FileName;
            downloader_.update_event += (msg, s, c, t, r) =>
            {
                if (s == HttpDownloader.Status.kDownloading)
                {
                    progressBar1.Value = (int)(c * progressBar1.Maximum / t);
                    label2.Text        = progressBar1.Value.ToString() + "%";
                    if (t > 0)
                    {
                        label3.Text = c.ToString() + " / " + t.ToString();
                    }
                    else
                    {
                        label3.Text = c.ToString();
                    }
                    label3.Text = label3.Text + "  " + r.ToString();
                }
                else if (s == HttpDownloader.Status.kComplete)
                {
                    progressBar1.Value = progressBar1.Maximum;
                    label2.Text        = "Finish";

                    if (t > 0)
                    {
                        c           = t;
                        label3.Text = c.ToString() + " / " + t.ToString();
                    }
                    else
                    {
                        label3.Text = c.ToString();
                    }

                    button1.Text = "Download";
                    downloader_.Dispose();
                    downloader_ = null;
                }
                else if (s >= HttpDownloader.Status.kAborted)
                {
                    label2.Text = s.ToString();
                }
            };

            button1.Text = "Abort";
            downloader_.Start();
        }
예제 #14
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            MinecraftVersion version = _verList.SelectedItem as MinecraftVersion;

            if (version == null)
            {
                return;
            }

            ViewModel.isWorking = true;

            try
            {
                string jsonPath = CoreManager.CoreMCL.Core.GameRootPath + "\\" + version.GetJsonPath();
                using (HttpClient client = new HttpClient())
                {
                    FileInfo file = new FileInfo(jsonPath);
                    if (!file.Directory.Exists)
                    {
                        file.Directory.Create();
                    }
                    File.Create(jsonPath).Dispose();
                    File.WriteAllText(jsonPath, await client.GetStringAsync(version.url));

                    string jarPath;
                    KMCCC.Launcher.Version kver = CoreManager.CoreMCL.Core.GetVersion(version.id);
                    jarPath = CoreManager.CoreMCL.Core.GameRootPath + "\\" + version.GetJarPath();

                    file = new FileInfo(jarPath);
                    if (!file.Directory.Exists)
                    {
                        file.Directory.Create();
                    }
                    File.Create(jarPath);

                    HttpDownloader downloader         = new HttpDownloader(kver.Downloads.Client.Url, jarPath);
                    var            progressController = await MainWindow.Current.ShowProgressAsync("正在下载:  " + kver.Id, "", true, DefaultDialogSettings);

                    downloader.DownloadProgressChanged += async delegate
                    {
                        if (downloader.ProgressInPercent == 100)
                        {
                            await progressController.CloseAsync();
                        }
                        else
                        {
                            progressController.SetProgress(downloader.ProgressInPercent / 100);
                            progressController.SetMessage("下载速度: " + GetDownloadSpeedFriendlyText(downloader));
                        }
                    };
                    progressController.Canceled += delegate
                    {
                        if (downloader.State != DownloadState.Completed)
                        {
                            downloader.Cancel();
                        }
                    };
                    downloader.Start();
                }
            }
            catch (IOException ex)
            {
                await MainWindow.Current.ShowMessageAsync("下载失败", ex.Message + ex.StackTrace);
            }
            catch (HttpRequestException ex)
            {
                await MainWindow.Current.ShowMessageAsync("下载失败", ex.Message + ex.StackTrace);
            }

            ViewModel.isWorking = false;
        }
예제 #15
0
        private async Task TestWithSize(long size)
        {
            var rd          = new Random((int)(DateTime.Now.Ticks % int.MaxValue));
            var targetBytes = new byte[size];

            rd.NextBytes(targetBytes);
            int port = 8080;

            using (var server = new FakeHttpServer(port, targetBytes))
            {
                var folderProvider = new FakeFolderProvider();
                var cacheProvider  = new FakeCacheProvider();
                var bufferProvider = new FakeBufferProvider();
                var downloader     = new HttpDownloader(
                    new DownloadTask(
                        "test-task",
                        new HttpTarget(
                            new Uri($"http://localhost:{port}/"),
                            "test-file"
                            ),
                        "test-destination-file",
                        "test-destination-folder",
                        DateTime.Now,
                        false
                        ),
                    folderProvider,
                    cacheProvider,
                    bufferProvider
                    );

                downloader.Start();

                TimeSpan cancellationStep = TimeSpan.FromSeconds(1);
                CancellationTokenSource completeTokenSource = new CancellationTokenSource();

                downloader.StatusChanged += async(sender, newStatus) =>
                {
                    switch (downloader.Status)
                    {
                    case DownloaderStatus.Running:
                        var step = cancellationStep;
                        cancellationStep *= 2;
                        await Task.Delay(step);

                        if (downloader.CanCancel)
                        {
                            downloader.Cancel();
                        }
                        break;

                    case DownloaderStatus.Ready:
                        downloader.Start();
                        break;

                    case DownloaderStatus.Completed:
                        completeTokenSource.Cancel();
                        break;

                    case DownloaderStatus.Pending:
                        break;

                    case DownloaderStatus.Disposed:
                        break;

                    case DownloaderStatus.Error:
                        throw downloader.Errors.First();

                    default:
                        throw new Exception($"unknown status {downloader.Status}");
                    }
                };

                try
                {
                    await Task.Delay(TimeSpan.FromMinutes(5), completeTokenSource.Token);
                }
                catch (TaskCanceledException) { }

                Assert.AreEqual(downloader.Status, DownloaderStatus.Completed);

                if (downloader.Result is StorageFile file)
                {
                    using (var istream = await file.OpenReadAsync())
                    {
                        using (var ostream = new MemoryStream(targetBytes))
                        {
                            Assert.IsTrue(istream.AsStream().Compare(ostream));
                        }
                    }
                }

                await downloader.Result.DeleteAsync();

                await downloader.DisposeAsync();
            }
        }