public ServerLogForm(ShadowsocksController controller) { this.controller = controller; this.Icon = Icon.FromHandle(Resources.ssw128.GetHicon()); InitializeComponent(); this.Width = 760; Configuration config = controller.GetCurrentConfiguration(); if (config.configs.Count < 8) { this.Height = 300; } else if (config.configs.Count < 20) { this.Height = 300 + (config.configs.Count - 8) * 16; } else { this.Height = 500; } UpdateTexts(); UpdateLog(); this.contextMenu1 = new ContextMenu(new MenuItem[] { this.clearItem = CreateMenuItem("&Clear", new EventHandler(this.ClearItem_Click)), }); ServerDataGrid.ContextMenu = contextMenu1; controller.ConfigChanged += controller_ConfigChanged; }
private async void UpdateRecords() { var records = new Dictionary <string, StatisticsRecord>(); foreach (var server in _controller.GetCurrentConfiguration().configs) { var id = server.Identifier(); List <int> inboundSpeedRecords = null; List <int> outboundSpeedRecords = null; List <int> latencyRecords = null; _inboundSpeedRecords.TryGetValue(id, out inboundSpeedRecords); _outboundSpeedRecords.TryGetValue(id, out outboundSpeedRecords); _latencyRecords.TryGetValue(id, out latencyRecords); records.Add(id, new StatisticsRecord(id, inboundSpeedRecords, outboundSpeedRecords, latencyRecords)); } if (Config.Ping) { var icmpResults = await TaskEx.WhenAll(_controller.GetCurrentConfiguration().configs.Select(ICMPTest)); foreach (var result in icmpResults.Where(result => result != null)) { records[result.Server.Identifier()].SetResponse(result.RoundtripTime); } } foreach (var kv in records.Where(kv => !kv.Value.IsEmptyData())) { AppendRecord(kv.Key, kv.Value); } }
public frmMain(ShadowsocksController sc) { InitializeComponent(); //初始化QQWry var qqwryPath = Environment.CurrentDirectory + "\\qqwry.dat"; if (qqwry == null && File.Exists(qqwryPath)) qqwry = new QQWry(qqwryPath); controller = sc; #region i18N if (System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag.ToLowerInvariant().StartsWith("zh")) { Text = "Ping测试"; dgvMain.Columns[0].HeaderText = "地址"; dgvMain.Columns[1].HeaderText = "IP地址"; dgvMain.Columns[2].HeaderText = "备注"; dgvMain.Columns[3].HeaderText = "物理地址"; dgvMain.Columns[4].HeaderText = "最大Ping值"; dgvMain.Columns[5].HeaderText = "最小Ping值"; dgvMain.Columns[6].HeaderText = "平均Ping值"; dgvMain.Columns[7].HeaderText = "失败次数"; dgvMain.Columns[8].HeaderText = "下行速度"; dgvMain.Columns[9].HeaderText = "测速"; tssStatusLabel.Text = "当前状态:"; tssStatus.Text = "准备就绪"; } #endregion LoadConfiguration(controller.GetCurrentConfiguration()); if (dgvMain.Rows.Count <= 5) { foreach (var row in dgvMain.Rows) { var t = new Thread(Ping) { IsBackground = true }; t.Start(row); } } else { ChangeStatus("Busy..."); var t = new Thread(Go) { IsBackground = true }; t.Start(dgvMain.Rows); } }