/// <summary> /// Creates a new download from a exist file in the list of the found files. /// </summary> /// <param name="FileName">The name of the file.</param> /// <param name="FileID">The ID of the file.</param> public static void AddDownload(string FileName, string FileID) { Lists.FilesFoundList.File file = Lists.FilesFoundList.GetFile(FileName, FileID); Objects.Download download = new Objects.Download(file.Name, file.Size, file.SHA1); download.Active = true; download.FindPeers(); if (List.Count > 0) { int n = 0; int max = List.Count - 1; int min = 0; int compare = 0; while (max >= min) { n = (max + min) / 2; compare = FileID.CompareTo(List[n].SHA1); if (compare > 0) { min = n + 1; } else if (compare < 0) { max = n - 1; } else { return; } } if (compare < 0) { n--; } List.Add(List[List.Count - 1]); for (int i = List.Count - 1; i > n + 1; i--) { List[i] = List[i - 1]; } List[n + 1] = download; } else { List.Add(download); } NewOrUpdatedDownload = true; }
/// <summary> /// Adds a download object. /// </summary> /// <param name="download">The download object.</param> public static void AddDownload(Objects.Download download) { download.Active = true; download.FindPeers(); if (List.Count > 0) { int n = 0; int max = List.Count - 1; int min = 0; int compare = 0; while (max >= min) { n = (max + min) / 2; compare = download.SHA1.CompareTo(List[n].SHA1); if (compare > 0) { min = n + 1; } else if (compare < 0) { max = n - 1; } else { return; } } if (compare < 0) { n--; } List.Add(List[List.Count - 1]); for (int i = List.Count - 1; i > n + 1; i--) { List[i] = List[i - 1]; } List[n + 1] = download; } else { List.Add(download); } NewOrUpdatedDownload = true; }
/// <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); } }
/// <summary> /// Creates a new download from a exist file in the list of the found files. /// </summary> /// <param name="FileName">The name of the file.</param> /// <param name="FileID">The ID of the file.</param> public static void AddDownload(string FileName, string FileID) { Lists.FilesFoundList.File file = Lists.FilesFoundList.GetFile(FileName, FileID); Objects.Download download = new Objects.Download(file.Name, file.Size, file.SHA1); download.Active = true; download.FindPeers(); if (List.Count > 0) { int n = 0; int max = List.Count - 1; int min = 0; int compare = 0; while (max >= min) { n = (max + min) / 2; compare = FileID.CompareTo(List[n].SHA1); if (compare > 0) { min = n + 1; } else if (compare < 0) { max = n - 1; } else { return; } } if (compare < 0) { n--; } List.Add(List[List.Count - 1]); for(int i = List.Count - 1; i > n + 1; i--) { List[i] = List[i - 1]; } List[n + 1] = download; } else { List.Add(download); } NewOrUpdatedDownload = true; }