Ejemplo n.º 1
0
        public static void Main()
        {
            bool useDownloadSpeedThrottling = false;

            // Please insert an URL of a large file here, otherwise the download will be finished too quickly to really demonstrate the functionality.
            var url               = new Uri("http://yourdomain.com/yourfile.zip");
            var file              = new System.IO.FileInfo("yourfile.zip");
            var requestBuilder    = new SimpleWebRequestBuilder();
            var dlChecker         = new DownloadChecker();
            var httpDlBuilder     = new SimpleDownloadBuilder(requestBuilder, dlChecker);
            var timeForHeartbeat  = 3000;
            var timeToRetry       = 5000;
            var maxRetries        = 5;
            var resumingDlBuilder = new ResumingDownloadBuilder(timeForHeartbeat, timeToRetry, maxRetries, httpDlBuilder);
            List <DownloadRange> alreadyDownloadedRanges = null;
            var bufferSize            = 4096;
            var numberOfParts         = 4;
            var maxRetryDownloadParts = 2;
            var download     = new MultiPartDownload(url, bufferSize, numberOfParts, resumingDlBuilder, requestBuilder, dlChecker, alreadyDownloadedRanges, maxRetryDownloadParts);
            var speedMonitor = new DownloadSpeedMonitor(maxSampleCount: 128);

            speedMonitor.Attach(download);
            var progressMonitor = new DownloadProgressMonitor();

            progressMonitor.Attach(download);

            if (useDownloadSpeedThrottling)
            {
                var downloadThrottling = new DownloadThrottling(maxBytesPerSecond: 200 * 1024, maxSampleCount: 128);
                downloadThrottling.Attach(download);
            }

            var dlSaver = new DownloadToFileSaver(file);

            dlSaver.Attach(download);
            download.DownloadCompleted += OnCompleted;
            download.DownloadCancelled += OnDownloadCancelled;
            download.DownloadStopped   += OnDownloadStopped;
            download.Start();

            while (!finished)
            {
                Thread.Sleep(1000);

                var alreadyDownloadedSizeInBytes = progressMonitor.GetCurrentProgressInBytes(download);
                var totalDownloadSizeInBytes     = progressMonitor.GetTotalFilesizeInBytes(download);
                var currentSpeedInBytesPerSecond = speedMonitor.GetCurrentBytesPerSecond();

                var currentProgressInPercent   = progressMonitor.GetCurrentProgressPercentage(download) * 100;
                var alreadyDownloadedSizeInKiB = (alreadyDownloadedSizeInBytes / 1024);
                var totalDownloadSizeInKiB     = (totalDownloadSizeInBytes / 1024);
                var currentSpeedInKiBPerSecond = (currentSpeedInBytesPerSecond / 1024);
                var remainingTimeInSeconds     = currentSpeedInBytesPerSecond == 0 ? 0 : (totalDownloadSizeInBytes - alreadyDownloadedSizeInBytes) / currentSpeedInBytesPerSecond;

                Console.WriteLine(
                    "Progress: " + currentProgressInPercent + "% " + "(" + alreadyDownloadedSizeInKiB + " of " + totalDownloadSizeInKiB + " KiB)" +
                    "   Speed: " + currentSpeedInKiBPerSecond + " KiB/sec." +
                    "   Remaining time: " + remainingTimeInSeconds + " sec.");
            }
        }
Ejemplo n.º 2
0
 public DownloadInfo(DownloadProgressMonitor dpm, DownloadSpeedMonitor dsm, MultiPartDownload mpd, string src, string dst)
 {
     _dpm = dpm;
     _dsm = dsm;
     _mpd = mpd;
     Url  = src;
     File = dst;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Update Downlaoder
        /// </summary>
        /// <param name="downloadurl">file url to download</param>
        public void DownloadUpdate()
        {
            bool useDownloadSpeedThrottling = false;

            var file              = new FileInfo(Path.GetFileName(DownloadUrl.ToString()));
            var requestBuilder    = new SimpleWebRequestBuilder();
            var dlChecker         = new DownloadChecker();
            var httpDlBuilder     = new SimpleDownloadBuilder(requestBuilder, dlChecker);
            var timeForHeartbeat  = 3000;
            var timeToRetry       = 5000;
            var maxRetries        = 25;
            var resumingDlBuilder = new ResumingDownloadBuilder(timeForHeartbeat, timeToRetry, maxRetries, httpDlBuilder);
            List <DownloadRange> alreadyDownloadedRanges = null;
            var bufferSize    = 4096;
            var numberOfParts = 4;
            var download      = new MultiPartDownload(DownloadUrl, bufferSize, numberOfParts, resumingDlBuilder, requestBuilder, dlChecker, alreadyDownloadedRanges);
            var speedMonitor  = new DownloadSpeedMonitor(maxSampleCount: 50000);

            speedMonitor.Attach(download);
            var progressMonitor = new DownloadProgressMonitor();

            progressMonitor.Attach(download);

            if (useDownloadSpeedThrottling)
            {
                var downloadThrottling = new DownloadThrottling(maxBytesPerSecond: 200 * 10024, maxSampleCount: 1288);
                downloadThrottling.Attach(download);
            }

            var dlSaver = new DownloadToFileSaver(file);

            dlSaver.Attach(download);
            download.DownloadCompleted += OnCompleted;
            download.Start();

            while (!DownloadFinished)
            {
                var alreadyDownloadedSizeInBytes = progressMonitor.GetCurrentProgressInBytes(download);
                var totalDownloadSizeInBytes     = progressMonitor.GetTotalFilesizeInBytes(download);
                var currentSpeedInBytesPerSecond = speedMonitor.GetCurrentBytesPerSecond();

                var currentProgressInPercent   = progressMonitor.GetCurrentProgressPercentage(download) * 100;
                var alreadyDownloadedSizeInKiB = (alreadyDownloadedSizeInBytes / 1024);
                var totalDownloadSizeInKiB     = (totalDownloadSizeInBytes / 1024);
                var currentSpeedInKiBPerSecond = (currentSpeedInBytesPerSecond / 1024);
                var remainingTimeInSeconds     = currentSpeedInBytesPerSecond == 0 ? 0 : (totalDownloadSizeInBytes - alreadyDownloadedSizeInBytes) / currentSpeedInBytesPerSecond;

                DownloaderProgress.Progress       = currentProgressInPercent;
                DownloaderProgress.DownlaodedSize = alreadyDownloadedSizeInKiB;
                DownloaderProgress.TotalSize      = totalDownloadSizeInKiB;
                DownloaderProgress.Speed          = currentSpeedInKiBPerSecond;
                DownloaderProgress.RemainingTime  = remainingTimeInSeconds;
            }
        }
Ejemplo n.º 4
0
        public void StartDownload()
        {
            Debugger.Log("start download: {0}", downloadUrl);
            var    url            = new Uri(downloadUrl);
            var    requestBuilder = new SimpleWebRequestBuilder();
            bool   needDownload   = false;
            long   fileLength     = 0;
            string path           = Path.GetDirectoryName(localPath);

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            using (FileStream fileStream = new FileStream(localPath, FileMode.OpenOrCreate, FileAccess.Write))
            {
                fileLength  = fileStream.Length;
                totalLength = requestBuilder.GetFileLength(downloadUrl);
                if (fileLength < totalLength)
                {
                    needDownload = true;
                }
            }
            if (needDownload)
            {
                var dlChecker        = new DownloadChecker();
                var httpDlBuilder    = new SimpleDownloadBuilder(requestBuilder, dlChecker);
                var timeForHeartbeat = 3000;
                var timeToRetry      = 5000;
                var maxRetries       = 8;
                var bufferSize       = 2048;
                downloader   = new ResumingDownload(url, bufferSize, fileLength, null, timeForHeartbeat, timeToRetry, maxRetries, httpDlBuilder);
                speedMonitor = new DownloadSpeedMonitor(128);
                speedMonitor.Attach(downloader);
                progressMonitor = new DownloadProgressMonitor();
                progressMonitor.Attach(downloader);

                var dlSaver = new DownloadToFileSaver(localPath, OnGetFileWriteException);
                dlSaver.Attach(downloader);
                downloader.DownloadCompleted += OnCompleted;
                downloader.DownloadCancelled += OnCancelled;
                downloader.Start();
            }
            else
            {
                OnCompleted(null);
            }
        }
Ejemplo n.º 5
0
        public static void Main()
        {
            // Please insert an URL of a large file here, otherwise the download will be finished too quickly to really demonstrate the functionality.
            var url               = new Uri("https://raw.githubusercontent.com/Toqe/Downloader/master/README.md");
            var file              = new System.IO.FileInfo("README.md");
            var requestBuilder    = new SimpleWebRequestBuilder();
            var dlChecker         = new DownloadChecker();
            var httpDlBuilder     = new SimpleDownloadBuilder(requestBuilder, dlChecker);
            var timeForHeartbeat  = 3000;
            var timeToRetry       = 5000;
            var maxRetries        = 5;
            var resumingDlBuilder = new ResumingDownloadBuilder(timeForHeartbeat, timeToRetry, maxRetries, httpDlBuilder);
            List <DownloadRange> alreadyDownloadedRanges = null;
            var bufferSize    = 4096;
            var numberOfParts = 4;
            var download      = new MultiPartDownload(url, bufferSize, numberOfParts, resumingDlBuilder, requestBuilder, dlChecker, alreadyDownloadedRanges);
            var speedMonitor  = new DownloadSpeedMonitor(maxSampleCount: 32);

            speedMonitor.Attach(download);
            var progressMonitor = new DownloadProgressMonitor();

            progressMonitor.Attach(download);
            var dlSaver = new DownloadToFileSaver(file);

            dlSaver.Attach(download);
            download.DownloadCompleted += OnCompleted;
            download.Start();

            while (!finished)
            {
                Thread.Sleep(1000);
                Console.WriteLine(
                    "Progress: " +
                    (progressMonitor.GetCurrentProgressPercentage(download) * 100) + "% " +
                    "(" + (progressMonitor.GetCurrentProgressInBytes(download) / 1024) + " of " +
                    (progressMonitor.GetTotalFilesizeInBytes(download) / 1024) + " KiB)" +
                    "   Speed: " +
                    (speedMonitor.GetCurrentBytesPerSecond() / 1024) + " KiB/sec.");
            }
        }
Ejemplo n.º 6
0
 public void StartDownload(string DownloadUrl, string SavePath = null)
 {
     RemainingTime = DownloadSpeed = 0;
     AvrDownload   = new List <int>()
     {
         0
     };
     AvrTime = new List <long>(0)
     {
         0
     };
     dlUri                       = new Uri(DownloadUrl);
     TempDirectoryName           = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, TempDirectoryName);
     FinishedDirectoryName       = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FinishedDirectoryName);
     requestBuilder              = new SimpleWebRequestBuilder();
     dlChecker                   = new DownloadChecker();
     httpDlBuilder               = new SimpleDownloadBuilder(requestBuilder, dlChecker);
     rdlBuilder                  = new SDResumine(timeForHeartbeat, timeToRetry, maxRetries, httpDlBuilder);
     download                    = new MultiPartDownload(dlUri, bufferSize, numberOfParts, rdlBuilder, requestBuilder, dlChecker, null);
     download.DownloadCompleted += DownloadCompleted;
     download.DataReceived      += DataReceived;
     download.DownloadStopped   += DataStopped;
     download.DownloadCancelled += DataCancelled;
     download.DownloadStarted   += DataStarted;
     download.DownloadError     += DataError;
     progressMonitor             = new DownloadProgressMonitor();
     speedMonitor                = new DownloadSpeedMonitor(128);
     speedMonitor.Attach(download);
     if (SavePath == null)
     {
         SavePath = Path.Combine(TempDirectoryName, Path.GetFileName(dlUri.ToString()));
     }
     dlSaver = new DownloadToFileSaver(SavePath, Path.Combine(FinishedDirectoryName, Path.GetFileName(dlUri.ToString())));
     dlSaver.Attach(download);
     progressMonitor.Attach(download);
     download.Start();
 }
Ejemplo n.º 7
0
 public DownloadClient()
 {
     progressMonitor = new DownloadProgressMonitor();
 }