using Edge.Core.Parser.BinaryParser; using Edge.Core.Parser.BinaryParser.MessageEntity; using Edge.Core.Parser.BinaryParser.Util; using ShengJu_CUT100_DES.MessageEntity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ShengJu_CUT100_DES { public class Parser : ParserBase { public Parser() : base(new MessageTemplateLookup()) { } public override byte[] Serialize(MessageTemplateBase message) { //add a temp value for make base.Serialize go through and then fill back the real length. ((MessageBase)message).Length = 4; var bytesWithoutCheck = base.Serialize(message); bytesWithoutCheck = new byte[] { // real length (byte)(bytesWithoutCheck.Length + 1) } .Concat(bytesWithoutCheck.Skip(1)).ToArray(); return bytesWithoutCheck.Concat(new byte[] { CacualteCHECK(bytesWithoutCheck) }).ToArray(); } public static byte CacualteCHECK(byte[] rawMessageWithoutCHECK) { int sum = 0; for (int i = 0; i < rawMessageWithoutCHECK.Length; i++) { sum += rawMessageWithoutCHECK[i]; } return (byte)~BitConverter.GetBytes(sum)[0]; } } }