Parser.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Edge.Core.Parser.BinaryParser;
  2. using Edge.Core.Parser.BinaryParser.MessageEntity;
  3. using Edge.Core.Parser.BinaryParser.Util;
  4. using ShengJu_CUT100_DES.MessageEntity;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace ShengJu_CUT100_DES
  11. {
  12. public class Parser : ParserBase
  13. {
  14. public Parser() : base(new MessageTemplateLookup())
  15. {
  16. }
  17. public override byte[] Serialize(MessageTemplateBase message)
  18. {
  19. //add a temp value for make base.Serialize go through and then fill back the real length.
  20. ((MessageBase)message).Length = 4;
  21. var bytesWithoutCheck = base.Serialize(message);
  22. bytesWithoutCheck = new byte[] {
  23. // real length
  24. (byte)(bytesWithoutCheck.Length + 1) }
  25. .Concat(bytesWithoutCheck.Skip(1)).ToArray();
  26. return bytesWithoutCheck.Concat(new byte[] { CacualteCHECK(bytesWithoutCheck) }).ToArray();
  27. }
  28. public static byte CacualteCHECK(byte[] rawMessageWithoutCHECK)
  29. {
  30. int sum = 0;
  31. for (int i = 0; i < rawMessageWithoutCHECK.Length; i++)
  32. {
  33. sum += rawMessageWithoutCHECK[i];
  34. }
  35. return (byte)~BitConverter.GetBytes(sum)[0];
  36. }
  37. }
  38. }