public AnnounceManager(IEnumerable <string> announceUrls, TransferMonitor monitor, TorrentData data) { //иницализация на списъка с тракери, състоящ се от класове TrackerInfo, които осигуряват //връзка с отделни тракери и заявки до тях trackers = new List <TrackerInfo>(); //прибавяне на HTTP тракерите от подадения списък с адреси trackers.AddRange(announceUrls.Where(u => u.StartsWith("http")).Select(u => new TrackerInfo(u))); //прикачане на събитието PeersReceived към всеки от тракерите (TrackerInfo) trackers.ForEach(t => t.PeersReceived += (sender, args) => OnPeersReceived(args.Value)); Monitor = monitor; Data = data; //инициализация на таймер за проверка на състоянието на всеки тракер regularTimer = new Timer(Regular); regularTimer.Change(1000, 5000); }
private void StartActions() { _stop = false; _stopping = false; Running = true; _tracker = new TrackerClient(Data.Announces); _statsReportTimer = new Timer(o => OnStatsReport(), new object(), 0, Timeout.Infinite); //таймер за отчитане на състоянието _monitor = new TransferMonitor(Data.InfoHash, Data.TotalLength); AnnounceManager = new AnnounceManager(Data.Announces, _monitor, Data); AnnounceManager.PeersReceived += (sender, args) => { Mode?.AddEndpoints(args.Value); }; }
private void StartActions() { stop = false; stopping = false; Running = true; tracker = new TrackerClient(Data.Announces); statsReportTimer = new Timer(o => OnStatsReport()); //таймер за отчитане на състоянието monitor = new TransferMonitor(Data.InfoHash, Data.TotalLength); AnnounceManager = new AnnounceManager(Data.Announces, monitor, Data); AnnounceManager.PeersReceived += (sender, args) => { if (Mode != null) { Mode.AddEndpoints(args.Value); } }; }
protected TorrentMode(BlockManager manager, BlockStrategist strategist, TorrentData metadata, TransferMonitor monitor) { //инициализация на обект за следене на пренесените данни Monitor = monitor; //обект за управляване на записа на парчета върху файловата система BlockManager = manager; //обект за управление на заявките на парчета към пиърите BlockStrategist = strategist; //обект, съдържаш метаданните на торента Metadata = metadata; //съобщение за здрависване, което се използва от този TorrentMode DefaultHandshake = new HandshakeMessage(Global.Instance.PeerId, new byte[8], Metadata.InfoHash, "BitTorrent protocol"); //конкурентен речник за съхранение на състоянието на активните пиъри Peers = new ConcurrentDictionary<string, PeerState>(); //прикачане на събитието за изключения на BlockManager-а manager.RaisedException += (s, e) => HandleException(e.Value); //инициализация на теймера за изпращане на KeepAlive съобщения KeepAliveTimer = new Timer(SendKeepAlives); }
protected TorrentMode(BlockManager manager, BlockStrategist strategist, TorrentData metadata, TransferMonitor monitor) { //инициализация на обект за следене на пренесените данни Monitor = monitor; //обект за управляване на записа на парчета върху файловата система BlockManager = manager; //обект за управление на заявките на парчета към пиърите BlockStrategist = strategist; //обект, съдържаш метаданните на торента Metadata = metadata; //съобщение за здрависване, което се използва от този TorrentMode DefaultHandshake = new HandshakeMessage(Global.Instance.PeerId, new byte[8], Metadata.InfoHash, "BitTorrent protocol"); //конкурентен речник за съхранение на състоянието на активните пиъри Peers = new ConcurrentDictionary <string, PeerState>(); //прикачане на събитието за изключения на BlockManager-а manager.RaisedException += (s, e) => HandleException(e.Value); //инициализация на теймера за изпращане на KeepAlive съобщения KeepAliveTimer = new Timer(SendKeepAlives); }
public DownloadMode(BlockManager manager, BlockStrategist strategist, TorrentData metadata, TransferMonitor monitor) : base(manager, strategist, metadata, monitor) { strategist.HavePiece += (sender, args) => SendHaveMessages(args.Value); }
public SeedMode(BlockManager manager, BlockStrategist strategist, TorrentData metadata, TransferMonitor monitor) : base(manager, strategist, metadata, monitor) { }
private void StartActions() { stop = false; stopping = false; Running = true; tracker = new TrackerClient(Data.Announces); statsReportTimer = new Timer(o => OnStatsReport()); //таймер за отчитане на състоянието monitor = new TransferMonitor(Data.InfoHash, Data.TotalLength); AnnounceManager = new AnnounceManager(Data.Announces, monitor, Data); AnnounceManager.PeersReceived += (sender, args) => { if (Mode != null) Mode.AddEndpoints(args.Value); }; }