Exemple #1
0
        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();
                }
            }
        }
Exemple #2
0
        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);
        }