示例#1
0
        private Downloader(
            int id,
            ResourceLocation rl,
            ResourceLocation[] mirrors,
            string localFile)
        {
            this.threads          = new List <Thread>();
            this.id               = id;
            this.resourceLocation = rl;
            if (mirrors == null)
            {
                this.mirrors = new List <ResourceLocation>();
            }
            else
            {
                this.mirrors = new List <ResourceLocation>(mirrors);
            }
            this.localFile = localFile;

            extentedProperties = new Dictionary <string, object>();

            defaultDownloadProvider = rl.BindProtocolProviderInstance(this);

            segmentCalculator   = new MinSizeSegmentCalculator();
            this.MirrorSelector = new SequentialMirrorSelector();
        }
示例#2
0
        private Downloader(
            int id,
            ResourceLocation rl,
            ResourceLocation[] mirrors, 
            string localFile)
        {
            this.threads = new List<Thread>();
            this.id = id;
            this.resourceLocation = rl;
            if (mirrors == null)
            {
                this.mirrors = new List<ResourceLocation>();
            }
            else
            {
                this.mirrors = new List<ResourceLocation>(mirrors);
            }
            this.localFile = localFile;

            extentedProperties = new Dictionary<string, object>();

            defaultDownloadProvider = rl.BindProtocolProviderInstance(this);

            segmentCalculator = new MinSizeSegmentCalculator();
            this.MirrorSelector = new SequentialMirrorSelector();
        }
示例#3
0
        /// <summary>
        /// 创建<see cref="Downloader"/>
        /// </summary>
        /// <param name="url">下载地址</param>
        /// <param name="mirrors">镜像地址</param>
        /// <param name="savePath">保存路径</param>
        /// <param name="threadCount">下载线程数</param>
        /// <param name="cacheLength">缓存大小,缓存可减少硬盘写入压力,不使用缓存可设置为<see cref="Downloader.EmptyCacheLength"/></param>
        public Downloader(string url, IEnumerable <string> mirrors, string savePath, int threadCount, int cacheLength)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentException("url can not be null or empty.");
            }
            if (string.IsNullOrEmpty(savePath))
            {
                throw new ArgumentException("savePath can not be null or empty.");
            }
            if (threadCount <= 0)
            {
                throw new ArgumentException("threadCount must bigger than 0.");
            }

            this._workID            = EmptyWorkID;
            this._segmentCalculator = new MinSizeSegmentCalculator(SegmentMinSize);
            // 初始化_localFileCache
            var mainSource = new FileSource(url);
            List <FileSource> mirrorSources = null;

            if (mirrors != null)
            {
                mirrorSources = new List <FileSource>();
                foreach (var mirror in mirrors)
                {
                    mirrorSources.Add(new FileSource(mirror));
                }
            }// if

            this._config = new LocalFileConfig
            {
                MainSource = mainSource,
                Mirrors    = mirrorSources,
            };

            this._maxThreadCount = threadCount;
            this._savePath       = savePath;
            this._configPath     = DownloadHelper.GetConfigPathFromFilePath(savePath);
            this._tmpPath        = DownloadHelper.GetTmpPathFromFilePath(savePath);
            this._cacheLength    = cacheLength;
            this._status         = DownloaderStatuses.Idle;
        }
示例#4
0
        /// <summary>
        /// 创建<see cref="Downloader"/>
        /// </summary>
        /// <param name="configPath">本地文件</param>
        /// <param name="threadCount">下载线程数</param>
        /// <param name="cacheLength">缓存大小,缓存可减少硬盘写入压力,不使用缓存可设置为<see cref="Downloader.EmptyCacheLength"/></param>
        public Downloader(string configPath, int threadCount, int cacheLength)
        {
            if (string.IsNullOrEmpty(configPath))
            {
                throw new ArgumentException("configPath can not be null or empty.");
            }

            var localFileConfig = LocalFileConfig.Load(configPath);

            if (localFileConfig.MainSource == null)
            {
                throw new Exception("LocalFileConfig.MainSource can not be null.");
            }
            if (localFileConfig.RemoteInfo == null)
            {
                throw new Exception("LocalFileConfig.RemoteInfo can not be null.");
            }
            if (localFileConfig.RemoteInfo.Size < 0)
            {
                throw new Exception("LocalFileConfig.RemoteInfo.Size must bigger than 0.");
            }
            if (!localFileConfig.HasSegment)
            {
                throw new Exception("LocalFileConfig.Segments can not be empty.");
            }

            this._workID            = EmptyWorkID;
            this._segmentCalculator = new MinSizeSegmentCalculator(SegmentMinSize);
            this._config            = localFileConfig;
            this._maxThreadCount    = threadCount;
            this._configPath        = configPath;
            this._savePath          = DownloadHelper.GetFilePathFromConfigPath(configPath);
            this._tmpPath           = DownloadHelper.GetTmpPathFromFilePath(this._savePath);
            this._cacheLength       = cacheLength;
            this._status            = DownloaderStatuses.Idle;
        }