Don't keep retrying single, dead server. Try all for cell!

pull/8/head
psychonic 14 years ago
parent 25132937d9
commit b1810c0eb0

@ -238,9 +238,9 @@ namespace DepotDownloader
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 ) 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 )
{ {
Console.Write("Finding content servers..."); Console.Write("Finding content servers...");
IPEndPoint contentServer = GetStorageServer(depotId, depotVersion, cellId); IPEndPoint[] contentServers = GetStorageServer(depotId, depotVersion, cellId);
if (contentServer == null) if (contentServers.Length == 0)
{ {
Console.WriteLine("\nError: Unable to find any content servers for depot {0}, version {1}", depotId, depotVersion); Console.WriteLine("\nError: Unable to find any content servers for depot {0}, version {1}", depotId, depotVersion);
return; return;
@ -255,18 +255,22 @@ namespace DepotDownloader
ContentServerClient.StorageSession session = null; ContentServerClient.StorageSession session = null;
int retryCount = 0; int retryCount = 0;
int server = 0;
while ( session == null ) while ( session == null )
{ {
try try
{ {
csClient.Connect( contentServer ); csClient.Connect( contentServers[server] );
session = csClient.OpenStorage( ( uint )depotId, ( uint )depotVersion, ( uint )cellId, credentials ); session = csClient.OpenStorage( ( uint )depotId, ( uint )depotVersion, ( uint )cellId, credentials );
} }
catch ( Steam2Exception ex ) catch ( Steam2Exception ex )
{ {
csClient.Disconnect(); csClient.Disconnect();
retryCount++; retryCount++;
server++;
if (server >= contentServers.Length)
server = 0;
if ( retryCount > MAX_STORAGE_RETRIES ) if ( retryCount > MAX_STORAGE_RETRIES )
{ {
@ -436,7 +440,7 @@ namespace DepotDownloader
return credentials; return credentials;
} }
static IPEndPoint GetStorageServer( int depotId, int depotVersion, int cellId ) static IPEndPoint[] GetStorageServer( int depotId, int depotVersion, int cellId )
{ {
foreach ( IPEndPoint csdServer in ServerCache.CSDSServers ) foreach ( IPEndPoint csdServer in ServerCache.CSDSServers )
{ {
@ -454,7 +458,7 @@ namespace DepotDownloader
if ( servers.Length == 0 ) if ( servers.Length == 0 )
continue; continue;
return servers.Aggregate((bestmin, x) => (bestmin == null || (x.Load <= bestmin.Load)) ? x :bestmin).StorageServer; return servers.OrderBy(x => x.Load).Select(x => x.StorageServer).ToArray();
} }
return null; return null;

Loading…
Cancel
Save