Skip to content

Commit 1689e57

Browse files
committed
Add option for manually adding CDNs
1 parent d0ab516 commit 1689e57

2 files changed

Lines changed: 18 additions & 7 deletions

File tree

TACTSharp/CDN.cs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace TACTSharp
77
public class CDN
88
{
99
private readonly HttpClient Client = new();
10-
private readonly List<string> CDNServers = [];
10+
private List<string> CDNServers = [];
1111
private readonly ConcurrentDictionary<string, Lock> FileLocks = [];
1212
private readonly Lock cdnLock = new();
1313
private bool HasLocal = false;
@@ -84,20 +84,30 @@ private void LoadCDNs()
8484
CDNServers.AddRange(splitLine[2].Trim().Split(' '));
8585
}
8686

87+
CDNServers.AddRange(Settings.AdditionalCDNs);
88+
8789
var pingTasks = new List<Task<(string server, long ping)>>();
88-
foreach (var server in CDNServers)
90+
foreach (var server in CDNServers.Distinct())
8991
{
9092
pingTasks.Add(Task.Run(() =>
9193
{
92-
var ping = new System.Net.NetworkInformation.Ping().Send(server, 400).RoundtripTime;
93-
Console.WriteLine("Ping to " + server + ": " + ping + "ms");
94-
return (server, ping);
94+
try
95+
{
96+
var ping = new System.Net.NetworkInformation.Ping().Send(server, 400).RoundtripTime;
97+
Console.WriteLine("Ping to " + server + ": " + ping + "ms");
98+
return (server, ping);
99+
}
100+
catch (Exception e)
101+
{
102+
Console.WriteLine("Failed to ping CDN " + server + ": " + (e.InnerException != null ? e.InnerException.Message : e.Message));
103+
return (server, 99999);
104+
}
95105
}));
96106
}
97107

98108
var pings = Task.WhenAll(pingTasks).Result;
99109

100-
CDNServers.AddRange(pings.OrderBy(p => p.ping).Select(p => p.server).ToList());
110+
CDNServers = [.. pings.OrderBy(p => p.ping).Where(p => p.ping != 99999).Select(p => p.server)];
101111

102112
timer.Stop();
103113
Console.WriteLine("Pinged " + CDNServers.Count + " in " + Math.Round(timer.Elapsed.TotalMilliseconds) + "ms, fastest CDNs in order: " + string.Join(", ", CDNServers));
@@ -123,7 +133,7 @@ private void LoadCASCIndices()
123133
var indexBucket = Convert.ToByte(Path.GetFileNameWithoutExtension(indexFile)[0..2], 16);
124134
var indexVersion = Convert.ToInt32(Path.GetFileNameWithoutExtension(indexFile)[2..], 16);
125135

126-
if(highestIndexPerBucket.TryGetValue(indexBucket, out var highestIndex))
136+
if (highestIndexPerBucket.TryGetValue(indexBucket, out var highestIndex))
127137
{
128138
if (indexVersion > highestIndex)
129139
highestIndexPerBucket[indexBucket] = indexVersion;

TACTSharp/Settings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ public class Settings
1414
public bool ListfileFallback = true;
1515
public bool TryCDN = true;
1616
public string ListfileURL = "https://github.com/wowdev/wow-listfile/releases/latest/download/community-listfile.csv";
17+
public List<string> AdditionalCDNs = [];
1718
}
1819
}

0 commit comments

Comments
 (0)