/// <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); }
/// <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); }
/// <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 + "-断开连接请求!"); } }