Parser.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Parser.BinaryParser;
  2. using Parser.BinaryParser.MessageEntity;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace HengShan_Pump_NonIC
  9. {
  10. public class Parser : ParserBase
  11. {
  12. public Parser() : base(new MessageTemplateLookup())
  13. {
  14. }
  15. public override byte[] Serialize(MessageTemplateBase message)
  16. {
  17. var bytesWithXRL = base.Serialize(message).ToList();
  18. if (message.GetType().GetProperty("XRL") != null)
  19. {
  20. ProcessXRLInMsgBody(ref bytesWithXRL);
  21. }
  22. return bytesWithXRL.ToArray();
  23. }
  24. private void ProcessXRLInMsgBody(ref List<byte> bytesWithXRL)
  25. {
  26. var bytesUsedToComputeXRL = bytesWithXRL.GetRange(2, bytesWithXRL.Count - 3).ToArray();
  27. byte XRL = 0;
  28. foreach (var b in bytesUsedToComputeXRL)
  29. {
  30. XRL = (byte)(XRL ^ b);
  31. }
  32. if (XRL == 0xFF)
  33. XRL = 0xEE;
  34. bytesWithXRL[bytesWithXRL.Count - 1] = XRL;
  35. }
  36. }
  37. }