1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- using Edge.Core.Parser.BinaryParser;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using Edge.Core.Parser.BinaryParser.Util;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace HengShan_Pump_NonIC_Plus
- {
- public class Parser : ParserBase
- {
- protected static NLog.Logger logger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("Communicator");
- public Parser() : base(new MessageTemplateLookup())
- {
- }
- public override byte[] Serialize(MessageTemplateBase message)
- {
- List<byte> bytesWithXRL = null;
- try
- {
- bytesWithXRL = base.Serialize(message).ToList();
- if (message.GetType().GetProperty("XRL") != null)
- {
- bytesWithXRL[bytesWithXRL.Count - 1] = ProcessXRLInMsgBody(bytesWithXRL);
- ProcessXRLInMsgBody(bytesWithXRL);
- }
- return bytesWithXRL.ToArray();
- }
- catch (Exception exxx)
- {
- string logStr = message?.GetType().Name ?? "";
- if (message != null)
- try { logStr += System.Environment.NewLine + message.ToLogString(); }
- catch { }
- if (bytesWithXRL != null && bytesWithXRL.Any())
- try { logStr += System.Environment.NewLine + bytesWithXRL.ToHexLogString(); }
- catch { }
- logger.Info("Serialize HengShanNonIC message: " + logStr + System.Environment.NewLine
- + " exceptioned, detail: " + exxx);
- throw;
- }
- }
- public override MessageTemplateBase Deserialize(byte[] rawData)
- {
- var pendingForXrlBytes = rawData.SkipLast(1).ToList();
- var xrlOri = rawData.Skip(pendingForXrlBytes.Count).First();
- var xrl = ProcessXRLInMsgBody(pendingForXrlBytes);
- return base.Deserialize(pendingForXrlBytes.ToArray());
- }
- private byte ProcessXRLInMsgBody(List<byte> bytesWithXRL)
- {
- var bytesUsedToComputeXRL = bytesWithXRL.GetRange(3, bytesWithXRL.Count - 3).ToArray();
- byte XRL = 0;
- foreach (var b in bytesUsedToComputeXRL)
- {
- XRL = (byte)(XRL ^ b);
- }
- if (XRL == 0x9F)
- XRL = 0xEE;
- return XRL;
- }
- }
- }
|