void DownloadLogic(int counter) { // FIXME: Hardcoded 15kB/sec - is this ok? if ((DateTime.Now - manager.StartTime) > TimeSpan.FromSeconds(20)) { foreach (string s in manager.Torrent.GetRightHttpSeeds) { string peerId = "-WebSeed-"; peerId = peerId + (webseedCount++).ToString().PadLeft(20 - peerId.Length, '0'); Uri uri = new Uri(s); // HACK: Don't want to add more than 10 same webseed (sometimes webseeds stuck) if (manager.Peers.ConnectedPeers.FindAll(p => p.Uri.Host.Equals(uri.Host)).Count > 9) { continue; } // Dont' want to add more than 2 same webseed if current webseeds is active (speed more than 5Kbs. if (manager.Peers.ConnectedPeers.FindAll(p => p.Uri.Host.Equals(uri.Host) && p.Monitor.DownloadSpeed > 5 * 1024 ).Count > 1 ) { continue; } Peer peer = new Peer(peerId, uri); PeerId id = new PeerId(peer, manager); HttpConnection connection = new HttpConnection(new Uri(s)); connection.Manager = this.manager; peer.IsSeeder = true; id.BitField.SetAll(true); id.Encryptor = new PlainTextEncryption(); id.Decryptor = new PlainTextEncryption(); id.IsChoking = false; id.AmInterested = !manager.Complete; id.Connection = connection; id.ClientApp = new Software(id.PeerID); manager.Peers.ConnectedPeers.Add(id); manager.RaisePeerConnected(new PeerConnectionEventArgs(manager, id, Direction.Outgoing)); PeerIO.EnqueueReceiveMessage (id.Connection, id.Decryptor, Manager.DownloadLimiter, id.Monitor, id.TorrentManager, id.ConnectionManager.messageReceivedCallback, id); } } // Remove inactive peers we haven't heard from if we're downloading if (manager.State == TorrentState.Downloading && manager.lastCalledInactivePeerManager + TimeSpan.FromSeconds(5) < DateTime.Now) { manager.InactivePeerManager.TimePassed(); manager.lastCalledInactivePeerManager = DateTime.Now; } // Now choke/unchoke peers; first instantiate the choke/unchoke manager if we haven't done so already if (manager.chokeUnchoker == null) manager.chokeUnchoker = new ChokeUnchokeManager(manager, manager.Settings.MinimumTimeBetweenReviews, manager.Settings.PercentOfMaxRateToSkipReview); manager.chokeUnchoker.UnchokeReview(); }
void DownloadLogic(int counter) { // FIXME: Hardcoded 15kB/sec - is this ok? if ((DateTime.Now - manager.StartTime) > TimeSpan.FromMinutes(1) && manager.Monitor.DownloadSpeed < 15 * 1024) { foreach (string s in manager.Torrent.GetRightHttpSeeds) { string peerId = "-WebSeed-"; peerId = peerId + (webseedCount++).ToString().PadLeft(20 - peerId.Length, '0'); Uri uri = new Uri(s); Peer peer = new Peer(peerId, uri); PeerId id = new PeerId(peer, manager); HttpConnection connection = new HttpConnection(new Uri(s)); connection.Manager = this.manager; peer.IsSeeder = true; id.BitField.SetAll(true); id.Encryptor = new PlainTextEncryption(); id.Decryptor = new PlainTextEncryption(); id.IsChoking = false; id.AmInterested = !manager.Complete; id.Connection = connection; id.ClientApp = new Software(id.PeerID); manager.Peers.ConnectedPeers.Add(id); manager.RaisePeerConnected(new PeerConnectionEventArgs(manager, id, Direction.Outgoing)); PeerIO.EnqueueReceiveMessage (id.Connection, id.Decryptor, Manager.DownloadLimiter, id.Monitor, id.TorrentManager, id.ConnectionManager.messageReceivedCallback, id); } // FIXME: In future, don't clear out this list. It may be useful to keep the list of HTTP seeds // Add a boolean or something so that we don't add them twice. manager.Torrent.GetRightHttpSeeds.Clear(); } // Remove inactive peers we haven't heard from if we're downloading if (manager.State == TorrentState.Downloading && manager.lastCalledInactivePeerManager + TimeSpan.FromSeconds(5) < DateTime.Now) { manager.InactivePeerManager.TimePassed(); manager.lastCalledInactivePeerManager = DateTime.Now; } // Now choke/unchoke peers; first instantiate the choke/unchoke manager if we haven't done so already if (manager.chokeUnchoker == null) manager.chokeUnchoker = new ChokeUnchokeManager(manager, manager.Settings.MinimumTimeBetweenReviews, manager.Settings.PercentOfMaxRateToSkipReview); manager.chokeUnchoker.UnchokeReview(); }
private void DownloadLogic(int counter) { // This timer thing is retarded. We should be checking if we're already downloading from the webseed. if ((DateTime.Now - manager.StartTime) > TimeSpan.FromSeconds(1)) { foreach (string s in manager.Torrent.GetRightHttpSeeds) { //if we don't have a webseed, insert it if (!manager.Peers.ConnectedPeers.Any(a => a.Peer.ConnectionUri.Equals(new Uri(s)))) { string peerId = "-WebSeed-"; peerId = peerId + (webseedCount++).ToString().PadLeft(20 - peerId.Length, '0'); var uri = new Uri(s); var peer = new Peer(peerId, uri); var id = new PeerId(peer, manager); var connection = new HttpConnection(new Uri(s)); connection.Manager = manager; peer.IsSeeder = true; id.BitField.SetAll(true); id.Encryptor = new PlainTextEncryption(); id.Decryptor = new PlainTextEncryption(); id.IsChoking = false; id.AmInterested = !manager.Complete; id.Connection = connection; id.ClientApp = new Software(id.PeerID); manager.Peers.ConnectedPeers.Add(id); manager.RaisePeerConnected(new PeerConnectionEventArgs(manager, id, Direction.Outgoing)); PeerIO.EnqueueReceiveMessage(id.Connection, id.Decryptor, Manager.DownloadLimiter, id.Monitor, id.TorrentManager, id.ConnectionManager.messageReceivedCallback, id); } } } // Remove inactive peers we haven't heard from if we're downloading if (manager.State == TorrentState.Downloading && manager.lastCalledInactivePeerManager + TimeSpan.FromSeconds(5) < DateTime.Now) { manager.InactivePeerManager.TimePassed(); manager.lastCalledInactivePeerManager = DateTime.Now; } // Now choke/unchoke peers; first instantiate the choke/unchoke manager if we haven't done so already if (manager.chokeUnchoker == null) manager.chokeUnchoker = new ChokeUnchokeManager(manager, manager.Settings.MinimumTimeBetweenReviews, manager.Settings.PercentOfMaxRateToSkipReview); manager.chokeUnchoker.UnchokeReview(); }