From bd7078aa4f1198c5e94dc4b89b44632b42ed1982 Mon Sep 17 00:00:00 2001 From: Gang Zhuo Date: Fri, 4 Mar 2016 20:01:58 +0800 Subject: [PATCH] tiny refactor --- .../Service/AvailabilityStatistics.cs | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/AvailabilityStatistics.cs b/shadowsocks-csharp/Controller/Service/AvailabilityStatistics.cs index e2be17ed..43bc4c49 100644 --- a/shadowsocks-csharp/Controller/Service/AvailabilityStatistics.cs +++ b/shadowsocks-csharp/Controller/Service/AvailabilityStatistics.cs @@ -167,9 +167,9 @@ namespace Shadowsocks.Controller records.Add(id, record); if (Config.Ping) { - MyPing ping = new MyPing(server, Repeat, record); + MyPing ping = new MyPing(server, Repeat); ping.Completed += ping_Completed; - ping.Start(); + ping.Start(record); } } @@ -181,8 +181,8 @@ namespace Shadowsocks.Controller private void ping_Completed(object sender, MyPing.CompletedEventArgs e) { - Server server = ((MyPing)sender).server; - StatisticsRecord record = (StatisticsRecord)((MyPing)sender).userstate; + Server server = e.Server; + StatisticsRecord record = (StatisticsRecord)e.UserState; record.SetResponse(e.RoundtripTime); Logging.Debug($"Ping {server.FriendlyName()} {e.RoundtripTime.Count} times, {(100 - record.PackageLoss * 100)}% packages loss, min {record.MinResponse} ms, max {record.MaxResponse} ms, avg {record.AverageResponse} ms"); } @@ -310,32 +310,30 @@ namespace Shadowsocks.Controller public const int TimeoutMilliseconds = 500; public EventHandler Completed; - public Server server; - public object userstate; + private Server server; private int repeat; private IPAddress ip; private Ping ping; private List RoundtripTime; - public MyPing(Server server, int repeat, object userstate) + public MyPing(Server server, int repeat) { this.server = server; this.repeat = repeat; - this.userstate = userstate; RoundtripTime = new List(repeat); ping = new Ping(); ping.PingCompleted += Ping_PingCompleted; } - public void Start() + public void Start(object userstate) { if (server.server == "") return; - new Task(() => ICMPTest(0)).Start(); + new Task(() => ICMPTest(0, userstate)).Start(); } - private void ICMPTest(int delay) + private void ICMPTest(int delay, object userstate) { try { @@ -351,7 +349,7 @@ namespace Shadowsocks.Controller repeat--; if (delay > 0) Thread.Sleep(delay); - ping.SendAsync(ip, TimeoutMilliseconds, null); + ping.SendAsync(ip, TimeoutMilliseconds, userstate); } catch (Exception e) { @@ -374,7 +372,7 @@ namespace Shadowsocks.Controller Logging.Debug($"Ping {server.FriendlyName()} timeout"); RoundtripTime.Add(null); } - TestNext(); + TestNext(e.UserState); } catch (Exception ex) { @@ -383,26 +381,30 @@ namespace Shadowsocks.Controller } } - private void TestNext() + private void TestNext(object userstate) { if (repeat > 0) { //Do ICMPTest in a random frequency int delay = TimeoutMilliseconds + new Random().Next() % TimeoutMilliseconds; - new Task(() => ICMPTest(delay)).Start(); + new Task(() => ICMPTest(delay, userstate)).Start(); } else { Completed?.Invoke(this, new CompletedEventArgs { - RoundtripTime = RoundtripTime + Server = server, + RoundtripTime = RoundtripTime, + UserState = userstate }); } } public class CompletedEventArgs : EventArgs { + public Server Server; public List RoundtripTime; + public object UserState; } }