123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using Edge.Core.Parser.BinaryParser.Attributes;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace LanTian_Sinopec_PumpIcCardReader
- {
- /// <summary>
- /// 加油机发送实时信息命令
- /// 加油机将实时信息发送给 PC 机;在加油机主动方式下,加油机定时与 PC 机进行的握手通讯;
- /// 加油机发送实时信息命令31H
- /// </summary>
- public class PumpRealTimeStateEvent : KaJiLianDongV11MessageTemplateBase
- {
- [Format(1, EncodingType.BIN, 1)]
- public byte SubMessageCount { get; set; }
- // minus 3 which include
- [EnumerableFormat("DataLength", "-2", 2, EncodingType = EncodingType.BIN)]
- public List<byte> SubMessageRaw { get; set; }
- public override string ToLogString()
- {
- var result = "PumpRealTimeStateEvent, SubMessageCount= " + this.SubMessageCount.ToString() + "." + System.Environment.NewLine;
- if (this.NozzleOperatingStates != null && this.NozzleOperatingStates.Any())
- foreach (var n in this.NozzleOperatingStates)
- result += n.ToLogString() + Environment.NewLine;
- if (this.CardInsertedStates != null && this.CardInsertedStates.Any())
- foreach (var c in this.CardInsertedStates)
- result += c.ToLogString() + Environment.NewLine;
- return result;
- //var offset = 0;
- //for (int i = 0; i < SubMessageCount; i++)
- //{
- // //1:卡插入;2:抬枪或加油中
- // if (SubMessageRaw[offset] == 1)
- // {
- // var restLen = SubMessageRaw[offset + 2];
- // Parser parser = new Parser();
- // var cardSubMsg = parser.Deserialize(SubMessageRaw.Skip(offset).Take(3 + restLen).ToArray(),
- // (MessageTemplateBase)Activator.CreateInstance(typeof(PumpStateChangeCardInsertedSubState))) as PumpStateChangeCardInsertedSubState;
- // offset += 3 + restLen;
- // result += "CardInserted: cardNo->" + cardSubMsg.ASN卡应用号 + ", nozzleNo->" + cardSubMsg.MZN枪号 +
- // ", cardBalance->" + cardSubMsg.BAL余额.ToString();
- // }
- // else if (SubMessageRaw[offset] == 2)
- // {
- // Parser parser = new Parser();
- // var nozzleSubMsg = parser.Deserialize(SubMessageRaw.Skip(offset).Take(11).ToArray(),
- // (MessageTemplateBase)Activator.CreateInstance(typeof(PumpStateChangeNozzleOperatingSubState))) as PumpStateChangeNozzleOperatingSubState;
- // offset += 11;
- // result += "NozzleChanged: nozzleNo->" + nozzleSubMsg.MZN枪号 + ", vol->" + nozzleSubMsg.VOL升数 + ", amount->" + nozzleSubMsg.AMN数额
- // + ", price->" + nozzleSubMsg.PRC价格;
- // }
- // else
- // {
- // throw new ArgumentException("只有两种状态需要上传信息。1:卡插入;2:抬枪或加油中, there're neither 1 nor 2 in msg");
- // }
- //}
- //return result;
- }
- public List<CardInsertedState> CardInsertedStates
- {
- get
- {
- return this.ParseSubMessages(this.SubMessageRaw, this.SubMessageCount).Item1;
- }
- }
- public List<NozzleOperatingState> NozzleOperatingStates
- {
- get
- {
- return this.ParseSubMessages(this.SubMessageRaw, this.SubMessageCount).Item2;
- }
- }
- private Tuple<List<CardInsertedState>, List<NozzleOperatingState>> ParseSubMessages(List<byte> SubMessageRaw, byte SubMessageCount)
- {
- var combinedResult =
- new Tuple<List<CardInsertedState>, List<NozzleOperatingState>>(
- new List<CardInsertedState>(),
- new List<NozzleOperatingState>());
- var offset = 0;
- for (int i = 0; i < SubMessageCount; i++)
- {
- //1:卡插入;2:抬枪或加油中
- if (SubMessageRaw[offset] == 1)
- {
- var restLen = SubMessageRaw[offset + 2];
- Parser parser = new Parser();
- var cardSubMsg = parser.Deserialize(SubMessageRaw.Skip(offset).Take(3 + restLen).ToArray(),
- (MessageTemplateBase)Activator.CreateInstance(typeof(CardInsertedState)));
- combinedResult.Item1.Add(cardSubMsg as CardInsertedState);
- offset += 3 + restLen;
- }
- else if (SubMessageRaw[offset] == 2)
- {
- Parser parser = new Parser();
- var cardSubMsg = parser.Deserialize(SubMessageRaw.Skip(offset).Take(11).ToArray(),
- (MessageTemplateBase)Activator.CreateInstance(typeof(NozzleOperatingState)));
- combinedResult.Item2.Add(cardSubMsg as NozzleOperatingState);
- offset += 11;
- }
- else
- {
- throw new ArgumentException("只有两种状态需要上传信息。1:卡插入;2:抬枪或加油中, there're neither 1 nor 2 in msg");
- }
- }
- return combinedResult;
- }
- }
- }
|