コード例 #1
0
ファイル: DockWindow.xaml.cs プロジェクト: minilxm/ADAS
        /// <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;
                }
            }
        }
コード例 #2
0
ファイル: DockWindow.xaml.cs プロジェクト: minilxm/ADAS
 private void OnSocketConnectOrClose(object sender, SocketConnectArgs e)
 {
     this.Dispatcher.Invoke(new SocketConnectOrCloseDelegate(SocketConnectOrClose), new object[] { e });
 }