/// <summary> /// 当客户端l连入或断开时要更新主界面 /// </summary> /// <param name="e"></param> private void SocketConnectOrClose(SocketConnectArgs e) { Controller controller = ControllerManager.Instance().Get(e.ConnectedSocket); if (controller == null) { return; } int dockNo = controller.DockNo; AgingDock dock = null; for (int i = 0; i < m_DockList.Count; i++) { dock = m_DockList[i]; if (dock.DockNo == dockNo) { if (e.Connected == true) { #region //如果已经开始老化了,新的控制器不准连入,但是如果是偶然断开重连的除外 if (dock.IsStartAging) { //这里主要是通过连接时间戳判断的 if (controller.SocketConnectTimestamp.Year > 2000) { controller.SocketConnectTimestamp = DateTime.Now; } else { if (controller.SocketToken != null && controller.SocketToken.ConnectSocket != null) { AsyncServer.Instance().CloseClientSocketEx(controller.SocketToken); } //controller.SocketToken.ConnectSocket.Shutdown(SocketShutdown.Both); else { Logger.Instance().ErrorFormat("SocketConnectOrClose() Error,编号为{0}的控制器SocketToken为null", dockNo); } break; } } else { controller.SocketConnectTimestamp = DateTime.Now; } SolidColorBrush brush = dock.dockGrid.Background as SolidColorBrush; switch (dock.AgingStatus) { case EAgingStatus.Unknown: case EAgingStatus.Waiting: dock.dockGrid.Background = new SolidColorBrush(Colors.Blue); dock.AgingStatus = EAgingStatus.PowerOn; break; case EAgingStatus.PowerOn: dock.dockGrid.Background = new SolidColorBrush(Colors.Blue); break; case EAgingStatus.Charging: case EAgingStatus.DisCharging: case EAgingStatus.Recharging: dock.dockGrid.Background = new SolidColorBrush(Colors.Yellow); break; case EAgingStatus.AgingComplete: dock.dockGrid.Background = new SolidColorBrush(Colors.Green); break; case EAgingStatus.Alarm: //出现除低电和耗尽以外的报警时提示红色 dock.dockGrid.Background = new SolidColorBrush(Colors.Red); break; default: break; } dock.lbStatus.Content = AgingStatusMetrix.Instance().GetAgingStatus(dock.AgingStatus); List <Controller> controllers = ControllerManager.Instance().Get(dockNo); int clientCount = controllers.Count((x) => { return(x.SocketToken != null && x.SocketToken.ConnectSocket != null && x.SocketToken.ConnectSocket.Connected == true); }); dock.lbWifiCount.Content = string.Format("控制器数量:{0}/5", clientCount); #endregion } else { #region List <Controller> controllers = ControllerManager.Instance().Get(dockNo); int clientCount = controllers.Count((x) => { return(x.SocketToken != null && x.SocketToken != e.ConnectedSocket && x.SocketToken.ConnectSocket != null && x.SocketToken.ConnectSocket.Connected == true); }); dock.lbWifiCount.Content = string.Format("控制器数量:{0}/5", clientCount); //int index = controllers.FindIndex((x) => { return x.SocketToken != null && x.SocketToken != e.ConnectedSocket;}); if (clientCount <= 0) { //dock.AgingStatus = EAgingStatus.Waiting; dock.dockGrid.Background = new SolidColorBrush(dock.DefaultColor); dock.lbStatus.Content = "等待接入"; break; } #endregion } break; } } }
private void OnSocketConnectOrClose(object sender, SocketConnectArgs e) { this.Dispatcher.Invoke(new SocketConnectOrCloseDelegate(SocketConnectOrClose), new object[] { e }); }