private void btnStart_Click(object sender, EventArgs e) { try { //实例化10个服务器 s1 = new TcpServerManager("0.0.0.0", 5555, "s1服务器"); s2 = new TcpServerManager("0.0.0.0", 5556, "s2服务器"); s3 = new TcpServerManager("0.0.0.0", 5557, "s3服务器"); s4 = new TcpServerManager("0.0.0.0", 5558, "s4服务器"); s5 = new TcpServerManager("0.0.0.0", 5559, "s5服务器"); s6 = new TcpServerManager("0.0.0.0", 5560, "s6服务器"); s7 = new TcpServerManager("0.0.0.0", 5561, "s7服务器"); s8 = new TcpServerManager("0.0.0.0", 5562, "s8服务器"); s9 = new TcpServerManager("0.0.0.0", 5563, "s9服务器"); s10 = new TcpServerManager("0.0.0.0", 5564, "s10服务器"); SetAppState(AppState.Started); // dtuDic = DTUUtil.getInstance().getDTUDic(); dealThread = new Thread(new ThreadStart(MainThreadPool)); dealThread.Start(); // threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(MonitorTaskQueue), 0, 1000, 20); } catch (Exception ex) { AddMsg(ex.Message); } }
/// <summary> /// 開始 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected override void ButtonF1_Click(object sender, EventArgs e) { Logger.StartMethod(MethodBase.GetCurrentMethod().Name); base.ButtonF1_Click(sender, e); // ▼▼▼ 業務処理 ▼▼▼ if (TcpServerUtil != null) { // 既に接続している場合、再接続前に破棄する TcpServerUtil.Dispose(); } // Listen string ip = tboxIP.Text; int.TryParse(tboxPort.Text, out int port); TcpServerUtil = new TcpServerManager(ip, port); listViewLog.Items.Add($"Listenを開始しました。IP[{ip}] Port[{port}]"); // Task停止用のトークン発行 CancelTokenSource = new CancellationTokenSource(); CancellationToken cToken = CancelTokenSource.Token; // Accept Loop Start acceptLoopTask = AcceptLoop(cToken); // ボタンの有効無効を設定 SetButtonEnabled(ActionMode.Listen); // ▲▲▲ 業務処理 ▲▲▲ Logger.EndMethod(MethodBase.GetCurrentMethod().Name); }
public Form1() { InitializeComponent(); regSetting = new Reg("sfMinerDigger").In("Setting").In("vps"); t = new TcpServerManager() { NormalMessage = (s, x) => { this.Invoke((EventHandler) delegate { var targetItem = GetItem(s.Ip); if (targetItem != null) { if (x.Contains("heartBeat")) { } else if (x.Contains("<connectCmdRequire>")) { targetItem.SubItems[3].Text = "初始化"; targetItem.SubItems[0].Text = HttpUtil.GetElementInItem(x, "connectCmdRequire"); s.ID = HttpUtil.GetElementInItem(x, "clientDeviceId"); var clientName = regSetting.In(s.ID).GetInfo("clientName", targetItem.SubItems[0].Text); s.Send(string.Format("<setClientName>{0}</setClientName>", clientName)); //用于确认当前名称并初始化 } else if (x.Contains("<InitComplete>")) { //终端已初始化完成 //synSetting,synFile //遍历 【同步文件】 下所有文件 var dic = new DirectoryInfo(Application.StartupPath + "\\同步设置"); var tmp = new StringBuilder(); foreach (var f in dic.EnumerateFiles()) { tmp.Append("<file><name>").Append(f.Name).Append("</name>").Append("<version>").Append(HttpUtil.GetMD5ByMD5CryptoService(f.FullName)).Append("</version>"); } if (tmp.Length > 0) { tmp.Append("<versionCheck>"); s.Send(tmp.ToString()); } } else { AppendLog("新消息[" + s.client.Client.RemoteEndPoint.ToString() + "] " + x); targetItem.SubItems[3].Text = x; } } }); }, ServerConnected = (x) => { this.Invoke((EventHandler) delegate { AppendLog("已连接:" + x.Ip); var info = new string[4]; info[1] = x.IsLocal?"主机":"终端"; info[2] = x.Ip; info[0] = x.clientName; LstConnection.Items.Add(new ListViewItem(info)); var welcome = new Task(() => { Thread.Sleep(3000); x.Send("<welcome>" + DateTime.Now + "</welcome>"); }); welcome.Start(); }); }, ServerDisconnected = (x) => { this.Invoke((EventHandler) delegate { AppendLog("已断开:" + x.Ip); for (int i = 0; i < LstConnection.Items.Count; i++) { if (LstConnection.Items[i].SubItems[2].Text == x.Ip) { LstConnection.Items.RemoveAt(i); } } }); }, HttpRequest = (x, s) => { s.Response(string.Format("<h1>Hey,测试服务器已开启</h1><br><p>当前连接数:{0}</p>", LstConnection.Items.Count)); } }; LstConnection.AfterLabelEdit += CheckIfUserEditName; }