@@ -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 ;
0 commit comments