Added shutdown token to CDN connection pool monitor

pull/49/head
Ryan Kistner 8 years ago
parent 5425ef756d
commit 7a757101bf

@ -24,6 +24,7 @@ namespace DepotDownloader
private AutoResetEvent populatePoolEvent; private AutoResetEvent populatePoolEvent;
private Task monitorTask; private Task monitorTask;
private CancellationTokenSource shutdownToken;
public CancellationTokenSource ExhaustedToken { get; set; } public CancellationTokenSource ExhaustedToken { get; set; }
public CDNClientPool(Steam3Session steamSession) public CDNClientPool(Steam3Session steamSession)
@ -35,15 +36,21 @@ namespace DepotDownloader
availableServerEndpoints = new BlockingCollection<CDNClient.Server>(); availableServerEndpoints = new BlockingCollection<CDNClient.Server>();
populatePoolEvent = new AutoResetEvent(true); populatePoolEvent = new AutoResetEvent(true);
shutdownToken = new CancellationTokenSource();
monitorTask = Task.Factory.StartNew(ConnectionPoolMonitorAsync).Unwrap(); monitorTask = Task.Factory.StartNew(ConnectionPoolMonitorAsync).Unwrap();
} }
public void Shutdown()
{
shutdownToken.Cancel();
}
private async Task<IList<CDNClient.Server>> FetchBootstrapServerListAsync() private async Task<IList<CDNClient.Server>> FetchBootstrapServerListAsync()
{ {
CDNClient bootstrap = new CDNClient(steamSession.steamClient); CDNClient bootstrap = new CDNClient(steamSession.steamClient);
while (true) while (!shutdownToken.IsCancellationRequested)
{ {
try try
{ {
@ -58,13 +65,15 @@ namespace DepotDownloader
Console.WriteLine("Failed to retrieve content server list: {0}", ex.Message); Console.WriteLine("Failed to retrieve content server list: {0}", ex.Message);
} }
} }
return null;
} }
private async Task ConnectionPoolMonitorAsync() private async Task ConnectionPoolMonitorAsync()
{ {
bool didPopulate = false; bool didPopulate = false;
while(true) while(!shutdownToken.IsCancellationRequested)
{ {
populatePoolEvent.WaitOne(TimeSpan.FromSeconds(1)); populatePoolEvent.WaitOne(TimeSpan.FromSeconds(1));
@ -75,6 +84,12 @@ namespace DepotDownloader
{ {
var servers = await FetchBootstrapServerListAsync().ConfigureAwait(false); var servers = await FetchBootstrapServerListAsync().ConfigureAwait(false);
if (servers == null)
{
ExhaustedToken?.Cancel();
return;
}
var weightedCdnServers = servers.Select(x => var weightedCdnServers = servers.Select(x =>
{ {
int penalty = 0; int penalty = 0;
@ -95,6 +110,7 @@ namespace DepotDownloader
else if ( availableServerEndpoints.Count == 0 && !steamSession.steamClient.IsConnected && didPopulate ) else if ( availableServerEndpoints.Count == 0 && !steamSession.steamClient.IsConnected && didPopulate )
{ {
ExhaustedToken?.Cancel(); ExhaustedToken?.Cancel();
return;
} }
} }
} }

@ -363,6 +363,12 @@ namespace DepotDownloader
public static void ShutdownSteam3() public static void ShutdownSteam3()
{ {
if (cdnPool != null)
{
cdnPool.Shutdown();
cdnPool = null;
}
if ( steam3 == null ) if ( steam3 == null )
return; return;

Loading…
Cancel
Save