From f258ac890375fe6f933cf641b7884dd79950062d Mon Sep 17 00:00:00 2001 From: azuisleet Date: Fri, 9 Dec 2011 00:29:02 -0700 Subject: [PATCH] Downloads files. --- DepotDownloader/ContentDownloader.cs | 54 ++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/DepotDownloader/ContentDownloader.cs b/DepotDownloader/ContentDownloader.cs index d7dba1da..747f118b 100644 --- a/DepotDownloader/ContentDownloader.cs +++ b/DepotDownloader/ContentDownloader.cs @@ -209,9 +209,16 @@ namespace DepotDownloader */ // find a proper bootstrap... - CDNClient.ClientEndPoint contentServer1 = new CDNClient.ClientEndPoint("4.28.20.42", 80); + CDNClient.ClientEndPoint contentServer1 = new CDNClient.ClientEndPoint("63.237.208.106", 80); List cdnServers = CDNClient.FetchServerList(contentServer1, cellId); + if (cdnServers.Count == 0) + { + Console.WriteLine("CS server returned 0 servers, not sure why this happens."); + cdnServers.Add(contentServer1); +// return; + } + Console.WriteLine(" Done!"); Console.Write("Downloading depot manifest..."); @@ -245,6 +252,49 @@ namespace DepotDownloader } Console.WriteLine(" Done!"); + + ulong complete_download_size = 0; + ulong size_downloaded = 0; + + foreach (var file in depotManifest.Files) + { + complete_download_size += file.TotalSize; + } + + foreach (var file in depotManifest.Files) + { + string download_path = Path.Combine(installDir, file.FileName); + string dir_path = Path.GetDirectoryName(download_path); + + int top = Console.CursorTop; + Console.WriteLine("00.00% Downloading {0}", download_path); + int top_post = Console.CursorTop; + Console.CursorTop = top; + + if (!Directory.Exists(dir_path)) + Directory.CreateDirectory(dir_path); + + FileStream fs = File.Create(download_path); + fs.SetLength((long)file.TotalSize); + + foreach (var chunk in file.Chunks) + { + string chunkID = Utils.BinToHex(chunk.ChunkID); + + byte[] encrypted_chunk = cdnClient.DownloadDepotChunk(depotId, chunkID); + byte[] chunk_data = cdnClient.ProcessChunk(encrypted_chunk, steam3.DepotKey); + + fs.Seek((long)chunk.Offset, SeekOrigin.Begin); + fs.Write(chunk_data, 0, chunk_data.Length); + + size_downloaded += chunk.UncompressedLength; + + Console.CursorLeft = 0; + Console.Write("{0:00.00}", ((float)size_downloaded / (float)complete_download_size) * 100.0f); + } + + Console.CursorTop = top_post; + } } private static void DownloadSteam2( ContentServerClient.Credentials credentials, int depotId, int depotVersion, int cellId, string username, string password, bool onlyManifest, bool gameServer, bool exclude, string installDir, string[] fileList ) @@ -297,10 +347,8 @@ namespace DepotDownloader using ( session ) { - Console.Write( "Downloading depot manifest..." ); - Steam2Manifest manifest = session.DownloadManifest(); byte[] manifestData = manifest.RawData;