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 )
{
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);
return;
@ -255,18 +255,22 @@ namespace DepotDownloader
ContentServerClient.StorageSession session = null;
int retryCount = 0;
int server = 0;
while ( session == null )
{
try
{
csClient.Connect( contentServer );
csClient.Connect( contentServers[server] );
session = csClient.OpenStorage( ( uint )depotId, ( uint )depotVersion, ( uint )cellId, credentials );
}
catch ( Steam2Exception ex )
{
csClient.Disconnect();
retryCount++;
server++;
if (server >= contentServers.Length)
server = 0;
if ( retryCount > MAX_STORAGE_RETRIES )
{
@ -436,7 +440,7 @@ namespace DepotDownloader
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 )
{
@ -454,7 +458,7 @@ namespace DepotDownloader
if ( servers.Length == 0 )
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;

Loading…
Cancel
Save