//编码工厂 public void ExecuteInternal() { List<BaseRequest> list = txMsgQueue.PopAll(); foreach (var br in list) { if (br is ShakeRequest) { ShakeResponse sr = new ShakeResponse(); sr.CommunicatinBoard = (br as ShakeRequest).Board; sr.DtTime = DateTime.Now; isFctRunning = false; rxFctMsgQueue.Push(sr); rxGeneralMsgQueue.Push(sr); rxSelfMsgQueue.Push(sr); } else if (br is StartFctRequest) { isFctRunning = true; } else if (br is StopFctRequest) { isFctRunning = true; StopFctTestResponse sr = new StopFctTestResponse(); sr.CommunicatinBoard = (br as StopFctRequest).Board; sr.DtTime = DateTime.Now; isFctRunning = false; rxFctMsgQueue.Push(sr); } else if (br is StartGeneralTestRequest) { isGeneralRunning = true; } else if (br is StopFctRequest) { isGeneralRunning = false; } } if (isFctRunning || isGeneralRunning) { //周期性的送心跳 HeartMsg msg1 = new HeartMsg(); msg1.CommunicatinBoard = cabinet.Racks[0].Boards[0]; msg1.DtTime = DateTime.Now; rxFctMsgQueue.Push(msg1); rxGeneralMsgQueue.Push(msg1); rxSelfMsgQueue.Push(msg1); HeartMsg msg2 = new HeartMsg(); msg2.CommunicatinBoard = cabinet.Racks[0].Boards[3]; msg2.DtTime = DateTime.Now; rxFctMsgQueue.Push(msg2); rxGeneralMsgQueue.Push(msg2); rxSelfMsgQueue.Push(msg2); } if (isFctRunning || isGeneralRunning) { //周期性送错误码子 { ComponentTestResponse cr1 = new ComponentTestResponse(); cr1.CommunicatinBoard = cabinet.Racks[0].Boards[0]; cr1.Component = cabinet.Racks[0].Boards[0].ComponentTypes[0].Components[2]; cr1.Component.AllTestTimes++; cr1.Component.ErrorPackageTimes++; cr1.DtTime = DateTime.Now; rxFctMsgQueue.Push(cr1); rxGeneralMsgQueue.Push(cr1); rxSelfMsgQueue.Push(cr1); } { ComponentTestResponse cr1 = new ComponentTestResponse(); cr1.CommunicatinBoard = cabinet.Racks[0].Boards[0]; cr1.Component = cabinet.Racks[0].Boards[0].ComponentTypes[1].Components[0]; cr1.Component.AllTestTimes++; cr1.Component.LostPackageTimes++; cr1.DtTime = DateTime.Now; rxFctMsgQueue.Push(cr1); rxGeneralMsgQueue.Push(cr1); rxSelfMsgQueue.Push(cr1); } { ComponentTestResponse cr1 = new ComponentTestResponse(); cr1.CommunicatinBoard = cabinet.Racks[0].Boards[0]; cr1.Component = cabinet.Racks[0].Boards[0].ComponentTypes[1].Components[1]; cr1.Component.AllTestTimes++; cr1.DtTime = DateTime.Now; rxFctMsgQueue.Push(cr1); rxGeneralMsgQueue.Push(cr1); rxSelfMsgQueue.Push(cr1); } { ComponentTestResponse cr1 = new ComponentTestResponse(); cr1.CommunicatinBoard = cabinet.Racks[0].Boards[3]; cr1.Component = cabinet.Racks[0].Boards[3].ComponentTypes[0].Components[0]; cr1.Component.AllTestTimes++; cr1.DtTime = DateTime.Now; rxFctMsgQueue.Push(cr1); rxGeneralMsgQueue.Push(cr1); rxSelfMsgQueue.Push(cr1); } } if (isGeneralRunning) { VIBTestResponse vr1 = new VIBTestResponse(); vr1.Board = cabinet.Racks[2].Boards[2]; vr1.CommunicatinBoard = cabinet.Racks[0].Boards[3]; vr1.DtTime = DateTime.Now; vr1.ErrorTimes = 0; vr1.LightPos = 10; vr1.ExpectedCode = 0xEAB10499; vr1.RealCode = 0xEAB10499; rxGeneralMsgQueue.Push(vr1); rxSelfMsgQueue.Push(vr1); VIBTestResponse vr2 = new VIBTestResponse(); vr2.Board = cabinet.Racks[2].Boards[2]; vr2.CommunicatinBoard = cabinet.Racks[0].Boards[3]; vr2.DtTime = DateTime.Now; vr2.ErrorTimes++; vr2.LightPos = 11; vr2.ExpectedCode = 0xEAB10499; vr2.RealCode = 0xEAB10498; rxGeneralMsgQueue.Push(vr2); rxSelfMsgQueue.Push(vr2); } }
public override List<BaseResponse> Decode(BasePackage bp, OriginalBytes obytes) { base.Decode(bp, obytes); Cabinet cabinet = SpringHelper.GetObject<Cabinet>("cabinet"); List<BaseResponse> list = new List<BaseResponse>(); //应用区数据格式:[EquipId(COMPONENT)(5)+testtimes(4)+误码次数(4)+丢包次数(4)+通信终端次数(4)]* if (bp.AppData.Length % 21 == 0) { for (int i = 0; i < bp.AppData.Length / 21; i++) { byte[] eqid = new byte[] { bp.AppData[i * 21 + 0], bp.AppData[i * 21 + 1], bp.AppData[i * 21 + 2], bp.AppData[i * 21 + 3], bp.AppData[i * 21 + 4] }; int allTimes = (int)Util.B2LInt32(new byte[] { bp.AppData[i * 21 + 5], bp.AppData[i * 21 + 6], bp.AppData[i * 21 + 7], bp.AppData[i * 21 + 8] }); int errorPackageTimes = (int)Util.B2LInt32(new byte[] { bp.AppData[i * 21 + 9], bp.AppData[i * 21 + 10], bp.AppData[i * 21 + 11], bp.AppData[i * 21 + 12] }); int lostPackageTimes = (int)Util.B2LInt32(new byte[] { bp.AppData[i * 21 + 13], bp.AppData[i * 21 + 14], bp.AppData[i * 21 + 15], bp.AppData[i * 21 + 16] }); int interruptTimes = (int)Util.B2LInt32(new byte[] { bp.AppData[i * 21 + 17], bp.AppData[i * 21 + 18], bp.AppData[i * 21 + 19], bp.AppData[i * 21 + 20] }); AbstractEq eq = cabinet.FindEq(eqid); if (eq != null && eq is Component) { ComponentTestResponse cr = new ComponentTestResponse(); cr.CommunicatinBoard = cabinet.GetCommunicationBoard(bp.RemoteIpEndPoint); cr.DtTime = DateTime.Now; cr.OriginalBytes = obytes; cr.Component = eq as Component; cr.Component.AllTestTimes = allTimes; cr.Component.ErrorPackageTimes = errorPackageTimes; cr.Component.LostPackageTimes = lostPackageTimes; cr.Component.InterruptTimes = interruptTimes; list.Add(cr); } } } return list; }
/// <summary> /// 当误码、丢包、中断三者有其一发生变化时就生成一条过滤后组件消息 /// </summary> /// <param name="cr"></param> public void ProcessFilter(ComponentTestResponse cr) { Component c = cr.Component; if (componentErrorPackageTimes.ContainsKey(c) && componentLostPackageTimes.ContainsKey(c) && componentInterruptTimes.ContainsKey(c)) { if (componentErrorPackageTimes[c] < c.ErrorPackageTimes || componentLostPackageTimes[c] < c.LostPackageTimes || componentInterruptTimes[c] < c.InterruptTimes) { FiltedComponentTestResponse fr = FiltedComponentTestResponse.CreateNew(c); rxMsgQueue.Push(fr); } componentErrorPackageTimes[c] = c.ErrorPackageTimes; componentLostPackageTimes[c] = c.LostPackageTimes; componentInterruptTimes[c] = c.InterruptTimes; } }