/// <summary> /// Control if there is the minimum number of uploader peers else get other uploader peers. /// </summary> /// <param name="download">The download object.</param> /// <returns>Return true if there is the minimum number of the uploader peers else return false.</returns> private static bool CheckMinNumberOfUploaderPeers(Objects.Download download) { if(download.ListUploaderPeers.Count < NumPeersForEachDownloads) { System.Random random = new Random(); while(download.ListUploaderPeers.Count < NumPeersForEachDownloads) { // control if there are peers that have this file if (download.ListPeers.Count == 0) { download.FindPeers(); } if (download.ListPeers.Count > download.ListUploaderPeers.Count) { // get a casual peer Objects.Peer peer = download.ListPeers[random.Next(download.ListPeers.Count)]; // control if the peer is already an uploader if (download.SearchUploaderPeer(peer.Key) == null) { // add the peer in the list of the uploader peers of the download download.AddUploaderPeer(peer); // send a FPR message to the new uploader peer if (StartDownloadNextFilePart(download, peer) == false) { DownloadFirstNotDownloadedFilePack(download, peer); } } } else { return false; } } return true; } else { return true; } }