/// <summary>
        /// 网络 状态变化 处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void Communication_OnCommunicationStateChange(object sender, CommunicationStateChangeArgs args)
        {
            //根据通讯编号找驱动映射关系
            string driverCode = GatewayMapper.GetDriverCode(args.CommunicationCode);

            //交给驱动处理业务包
            GatewayManager.DriverManager.HandleCommunicationStateChange(driverCode, args);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 处理网关
        /// </summary>
        /// <param name="stateChangeArgs">通讯状态变化参数</param>
        public void HandleCommunicationStateChange(string driverCode, CommunicationStateChangeArgs stateChangeArgs)
        {
            if (!_driverCache.ContainsKey(driverCode))
            {
                LogHelper.Error("DriverManager.HandleNetData() 错误,driverCode:" + driverCode + " 驱动编号不存在");
                return;
            }

            _driverCache[driverCode].CommunicationStateChangeNotify(stateChangeArgs);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 网关通讯状态变化通知
        /// </summary>
        /// <param name="stateChangeArgs">通讯状态变化参数</param>
        public void CommunicationStateChangeNotify(CommunicationStateChangeArgs stateChangeArgs)
        {
            bool         flag = false;
            CacheNetWork curnet;
            int          curid = 0;

            if (stateChangeArgs.CommunicationState == CommunicationState.Connect)
            {
                //网络连接成功处理
                flag = true;
                NetworkDeviceInfo net = Cache.CacheManager.QueryFrist <NetworkDeviceInfo>(p => p.IP == stateChangeArgs.UniqueCode, true);
                if (net == null)
                {
                    net = new NetworkDeviceInfo();
                }
                net.NetID = (int)stateChangeArgs.ConntecionId;
                net.State = 3;
                net.IP    = stateChangeArgs.UniqueCode;
                lock (Cache.LockWorkNet)
                {
                    curnet = Cache.LstWorkNet.Find(delegate(CacheNetWork p) { return(p.IP == stateChangeArgs.UniqueCode); });
                    flag   = false;
                    if (curnet == null)
                    {
                        flag   = true;
                        curnet = new Driver.CacheNetWork();
                    }
                    curnet.DttBridgeReceiveTime = DateTime.Now;
                    curnet.State          = 3;
                    curnet.IP             = stateChangeArgs.UniqueCode;
                    curnet.NetID          = (int)stateChangeArgs.ConntecionId;
                    curnet.BBridgeRevMark = false;
                    if (flag)
                    {
                        Cache.LstWorkNet.Add(curnet);
                    }
                }
                SendNetStateToCenter(net);
                LogHelper.Info("收到" + curnet.IP + "-请求连接命令!");
            }
            else if (stateChangeArgs.CommunicationState == CommunicationState.Disconnect)
            {
                //网络断开处理
                NetworkDeviceInfo net = Cache.CacheManager.QueryFrist <NetworkDeviceInfo>(p => p.IP == stateChangeArgs.UniqueCode, true);
                if (net == null)
                {
                    net = new NetworkDeviceInfo();
                }
                curid = GetMacConnectionID(stateChangeArgs.UniqueCode);
                if (curid > 0)
                {
                    if (stateChangeArgs.ConntecionId < curid)
                    {
                        LogHelper.Info("断开连接不处理:ConnectIdOld=" + curid + ",ConnectIdNew=" + stateChangeArgs.ConntecionId);
                        return;
                    }
                }
                net.IP    = stateChangeArgs.UniqueCode;
                net.NetID = 0;
                net.State = (short)ItemState.EquipmentInterrupted;

                lock (Cache.LockWorkNet)//更新网络模块缓存
                {
                    curnet = Cache.LstWorkNet.Find(delegate(CacheNetWork p) { return(p.IP == stateChangeArgs.UniqueCode); });
                    if (curnet != null)
                    {
                        curnet.DttBridgeReceiveTime = DateTime.Now.AddSeconds(-(ReDoSetTime - 10));
                        curnet.State          = 0;
                        curnet.NetID          = 0;
                        curnet.BBridgeRevMark = false;
                    }
                }
                SendNetStateToCenter(net);
                LogHelper.Info("收到" + curnet.IP + "-断开连接请求!");
            }
        }