public CdnClient(SteamKit2.CDNClient cdnClient, CdnServerWrapper serverWrapper) { InternalCdnClient = cdnClient; ServerWrapper = serverWrapper; }
public async Task FillServerPoolAsync() { // Await until we've logged in and have our suggest cell ID await _steamContentClient.SteamClient.AwaitReadyAsync(_steamContentClient.SteamClient.CancellationToken); // Add any not-yet-tracked servers var servers = await GetServersAsync(); foreach (var server in servers) { if (_servers.Any(x => x.Server.Host == server.Host)) { continue; } var serverWrapper = new CdnServerWrapper(server); var qualityFromMemory = _steamContentServerQualities.FirstOrDefault(x => x.Host == serverWrapper.Server.Host); if (qualityFromMemory != null) { serverWrapper.Score = qualityFromMemory.Score; } _servers.Add(serverWrapper); } // Fresh database over server quality if (_servers.Sum(x => x.Score) == 0) { foreach (var serverWrapper in _servers) { for (int i = 0; i < serverWrapper.Server.NumEntries; i++) { var cdnClient = new CDNClient(_steamContentClient.SteamClient.InternalClient); //await cdnClient.ConnectAsync(serverWrapper.Server); var wrapper = new CdnClient(cdnClient, serverWrapper); _cdnClientWrappersAvailable.Add(wrapper); } } } else { var orderedServers = new Queue <CdnServerWrapper>(_servers.OrderByDescending(x => x.Score).OrderBy(x => x.Server.WeightedLoad).OrderBy(x => x.Server.Load)); int refillsRemaining = CLIENTS_REFILL_LIMIT; while (orderedServers.Count > 0) { var serverWrapper = orderedServers.Dequeue(); for (int i = 0; i < serverWrapper.Server.NumEntries; i++) { var cdnClient = new CDNClient(_steamContentClient.SteamClient.InternalClient); var wrapper = new CdnClient(cdnClient, serverWrapper); _cdnClientWrappersAvailable.Add(wrapper); if (--refillsRemaining <= 0) { break; } } } } _poolFilledEvent.Set(); }