예제 #1
0
        public DownloadManager(string configPath, NetworkManager networkManager, CacheManager cacheManager, BufferManager bufferManager)
        {
            _networkManager = networkManager;
            _cacheManager   = cacheManager;
            _bufferManager  = bufferManager;

            _settings = new Settings(configPath);

            _downloadTaskManager = new TaskManager(this.DownloadingThread);

            for (int i = 0; i < _threadCount; i++)
            {
                _decodeTaskManagers.Add(new TaskManager(this.DecodingThread));
            }

            _volatileDownloadItemInfoManager              = new VolatileDownloadItemInfoManager();
            _volatileDownloadItemInfoManager.AddEvent    += (info) => this.Event_AddInfo(info);
            _volatileDownloadItemInfoManager.RemoveEvent += (info) => this.Event_RemoveInfo(info);

            _downloadItemInfoManager               = new DownloadItemInfoManager();
            _downloadItemInfoManager.AddEvents    += (info) => this.Event_AddInfo(info);
            _downloadItemInfoManager.RemoveEvents += (info) => this.Event_RemoveInfo(info);

            _protectCacheInfoManager = new ProtectedCacheInfoManager(_cacheManager);

            _watchTimer = new WatchTimer(this.WatchThread);
            _watchTimer.Start(new TimeSpan(0, 1, 0));

            _cacheManager.AddedBlockEvents   += (hashes) => this.Update_DownloadBlockStates(true, hashes);
            _cacheManager.RemovedBlockEvents += (hashes) => this.Update_DownloadBlockStates(false, hashes);
        }