77 "strings"
88 "time"
99
10- . "github.com/oneclickvirt/defaultset"
1110 "github.com/oneclickvirt/speedtest/model"
1211 "github.com/showwin/speedtest-go/speedtest"
1312 "github.com/showwin/speedtest-go/speedtest/transport"
@@ -120,6 +119,9 @@ func OfficialCustomSpeedTest(url, byWhat string, num int, language string) {
120119 var err error
121120 serverMap := make (map [time.Duration ]* speedtest.Server )
122121 for _ , server := range targets {
122+ if server == nil {
123+ continue
124+ }
123125 err = server .PingTest (nil )
124126 if err != nil {
125127 server .Latency = 1000 * time .Millisecond
@@ -133,18 +135,22 @@ func OfficialCustomSpeedTest(url, byWhat string, num int, language string) {
133135 sort .Slice (pingList , func (i , j int ) bool {
134136 return pingList [i ] < pingList [j ]
135137 })
136- if num == - 1 || num >= len (pingList ) {
137- num = len (pingList )
138- } else if len (pingList ) == 0 {
138+ if len (pingList ) == 0 {
139139 fmt .Println ("No match servers" )
140140 if model .EnableLoger {
141141 Logger .Info ("No match servers" )
142142 }
143143 return
144144 }
145+ if num == - 1 || num >= len (pingList ) {
146+ num = len (pingList )
147+ }
145148 var serverName , UPStr , DLStr , Latency , PacketLoss string
146149 for i := 0 ; i < len (pingList ); i ++ {
147150 server := serverMap [pingList [i ]]
151+ if server == nil {
152+ continue
153+ }
148154 if i < num {
149155 // speedtest --progress=no --accept-license --accept-gdpr
150156 sptCheck := execCommand ("speedtest" , "--progress=no" , "--server-id=" + server .ID , "--accept-license" , "--accept-gdpr" )
@@ -191,26 +197,65 @@ func NearbySpeedTest() {
191197 InitLogger ()
192198 defer Logger .Sync ()
193199 }
194- serverList , _ := speedtestClient .FetchServers ()
195- targets , _ := serverList .FindServer ([]int {})
200+ serverList , err := speedtestClient .FetchServers ()
201+ if err != nil || serverList == nil {
202+ if model .EnableLoger && err != nil {
203+ Logger .Info (err .Error ())
204+ }
205+ return
206+ }
207+ targets , err := serverList .FindServer ([]int {})
208+ if err != nil {
209+ if model .EnableLoger {
210+ Logger .Info (err .Error ())
211+ }
212+ return
213+ }
196214 analyzer := speedtest .NewPacketLossAnalyzer (nil )
197215 var LowestLatency time.Duration
198216 var NearbyServer * speedtest.Server
199217 var PacketLoss string
200218 for _ , server := range targets {
201- server .PingTest (nil )
219+ if server == nil {
220+ continue
221+ }
222+ if err := server .PingTest (nil ); err != nil {
223+ if model .EnableLoger {
224+ Logger .Info (err .Error ())
225+ }
226+ continue
227+ }
202228 if LowestLatency == 0 && NearbyServer == nil {
203229 LowestLatency = server .Latency
204230 NearbyServer = server
205231 } else if server .Latency < LowestLatency && NearbyServer != nil {
232+ LowestLatency = server .Latency
206233 NearbyServer = server
207234 }
208- server .Context .Reset ()
235+ if server .Context != nil {
236+ server .Context .Reset ()
237+ }
209238 }
210239 if NearbyServer != nil {
211- NearbyServer .DownloadTest ()
212- NearbyServer .UploadTest ()
240+ err = NearbyServer .DownloadTest ()
241+ if err != nil {
242+ if model .EnableLoger {
243+ Logger .Info (err .Error ())
244+ }
245+ return
246+ }
247+ err = NearbyServer .UploadTest ()
248+ if err != nil {
249+ if model .EnableLoger {
250+ Logger .Info (err .Error ())
251+ }
252+ return
253+ }
213254 err := analyzer .Run (NearbyServer .Host , func (packetLoss * transport.PLoss ) {
255+ if packetLoss == nil {
256+ PacketLoss = "N/A"
257+ return
258+ }
214259 PacketLoss = strings .ReplaceAll (packetLoss .String (), "Packet Loss: " , "" )
215260 })
216261 if err == nil {
@@ -220,7 +265,9 @@ func NearbySpeedTest() {
220265 fmt .Print (formatString (NearbyServer .Latency .String (), 16 ))
221266 fmt .Print (formatString (PacketLoss , 16 ))
222267 fmt .Println ()
223- NearbyServer .Context .Reset ()
268+ if NearbyServer .Context != nil {
269+ NearbyServer .Context .Reset ()
270+ }
224271 } else if model .EnableLoger {
225272 Logger .Info (err .Error ())
226273 }
@@ -243,6 +290,9 @@ func CustomSpeedTest(url, byWhat string, num int, language string) {
243290 var err , err1 , err2 , err3 error
244291 serverMap := make (map [time.Duration ]* speedtest.Server )
245292 for _ , server := range targets {
293+ if server == nil {
294+ continue
295+ }
246296 err = server .PingTest (nil )
247297 if err != nil {
248298 server .Latency = 1000 * time .Millisecond
@@ -258,21 +308,29 @@ func CustomSpeedTest(url, byWhat string, num int, language string) {
258308 })
259309 analyzer := speedtest .NewPacketLossAnalyzer (nil )
260310 var PacketLoss string
261- if num == - 1 || num >= len (pingList ) {
262- num = len (pingList )
263- } else if len (pingList ) == 0 {
311+ if len (pingList ) == 0 {
264312 fmt .Println ("No match servers" )
265313 if model .EnableLoger {
266314 Logger .Info ("No match servers" )
267315 }
268316 return
269317 }
318+ if num == - 1 || num >= len (pingList ) {
319+ num = len (pingList )
320+ }
270321 for i := 0 ; i < len (pingList ); i ++ {
271322 server := serverMap [pingList [i ]]
323+ if server == nil {
324+ continue
325+ }
272326 if i < num {
273327 err1 = server .DownloadTest ()
274328 err2 = server .UploadTest ()
275329 err3 = analyzer .Run (server .Host , func (packetLoss * transport.PLoss ) {
330+ if packetLoss == nil {
331+ PacketLoss = "N/A"
332+ return
333+ }
276334 PacketLoss = strings .ReplaceAll (packetLoss .String (), "Packet Loss: " , "" )
277335 })
278336 if err3 != nil {
@@ -287,15 +345,19 @@ func CustomSpeedTest(url, byWhat string, num int, language string) {
287345 Logger .Info (server .ID )
288346 Logger .Info (err1 .Error ())
289347 }
290- server .Context .Reset ()
348+ if server .Context != nil {
349+ server .Context .Reset ()
350+ }
291351 continue
292352 }
293353 if err2 != nil {
294354 if model .EnableLoger {
295355 Logger .Info (server .ID )
296356 Logger .Info (err2 .Error ())
297357 }
298- server .Context .Reset ()
358+ if server .Context != nil {
359+ server .Context .Reset ()
360+ }
299361 continue
300362 }
301363 if language == "zh" {
@@ -315,6 +377,8 @@ func CustomSpeedTest(url, byWhat string, num int, language string) {
315377 fmt .Print (formatString (PacketLoss , 16 ))
316378 fmt .Println ()
317379 }
318- server .Context .Reset ()
380+ if server .Context != nil {
381+ server .Context .Reset ()
382+ }
319383 }
320384}
0 commit comments