private static void getArchives(string url, string[] archives) { var indexes = new archiveIndex[archives.Count()]; for (int i = 0; i < archives.Count(); i++) { indexes[i].name = archives[i]; string name = url + "data/" + archives[i][0] + archives[i][1] + "/" + archives[i][2] + archives[i][3] + "/" + archives[i]; string cleanname = name.Replace("http://" + cdns.entries[0].hosts[0], ""); if (!File.Exists(cacheDir + cleanname)) // Check if already downloaded { using (var webClient = new System.Net.WebClient()) { webClient.DownloadFileAsync(new Uri(name), cacheDir + cleanname); Console.Write("\n"); webClient.DownloadProgressChanged += (s, e) => { Console.Write("\r" + e.ProgressPercentage + "% for archive " + archives[i]); }; while (webClient.IsBusy) { } } } else { var MyClient = WebRequest.Create(name) as HttpWebRequest; MyClient.Method = WebRequestMethods.Http.Get; var response = MyClient.GetResponse() as HttpWebResponse; if (response.Headers["Content-Length"] != new FileInfo(cacheDir + cleanname).Length.ToString()) { Console.WriteLine("!!! Archive " + cleanname + " is incomplete or has been deleted from CDN. " + response.Headers["Content-Length"] + " vs " + new FileInfo(cacheDir + cleanname).Length.ToString() + ". Attempting redownload!"); using (var webClient = new System.Net.WebClient()) { //byte[] file; try { webClient.DownloadFile(new Uri(name), cacheDir + cleanname); // file = webClient.DownloadData(new Uri(name)); // if (file != null) File.WriteAllBytes(cacheDir + cleanname, file); } catch (WebException e) { Console.WriteLine(e.Message); } } } MyClient.Abort(); } } }
private static archiveIndex[] getIndexes(string url, string[] archives) { var indexes = new archiveIndex[archives.Count()]; for (int i = 0; i < archives.Count(); i++) { indexes[i].name = archives[i]; using (var webClient = new System.Net.WebClient()) { byte[] indexContent; indexContent = downloadAndReturnCDNFile(url + "data/" + archives[i][0] + archives[i][1] + "/" + archives[i][2] + archives[i][3] + "/" + archives[i] + ".index"); using (BinaryReader bin = new BinaryReader(new MemoryStream(indexContent))) { int indexEntries = indexContent.Length / 4096; var entries = new List <archiveIndexEntry>(); for (int b = 0; b < indexEntries; b++) { for (int bi = 0; bi < 170; bi++) { var entry = new archiveIndexEntry(); entry.headerHash = BitConverter.ToString(bin.ReadBytes(16)).Replace("-", ""); entry.size = bin.ReadUInt32(true); entry.offset = bin.ReadUInt32(true); //Console.WriteLine(entry.headerHash + " " + entry.size + " " + entry.offset); entries.Add(entry); } bin.ReadBytes(16); } indexes[i].archiveIndexEntries = entries.ToArray(); } } } return(indexes); }