12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using Edge.Core.Parser.BinaryParser;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace VeederRoot_ATG_Console
- {
- /// <summary>
- /// Used for 2 kinds of message parsing:
- /// - VR ATG message, with format like <SOH>i201xxxxxxxxx<ETX>
- /// - DispenserInterface messages, with format like <SOH>Bxxxxxxx<ETX>
- /// </summary>
- public class Parser : ParserBase
- {
- public Parser() : base(new MessageTemplateLookup()) { }
- public int CaculateCheckSum(byte[] msg)
- {
- int checkSum = 0;
- for (int i = 0; i < msg.Length; i++)
- {
- checkSum += msg[i];
- }
- return 0x10000 - (checkSum % 0x10000);
- }
- //public byte[] CaculateCheckSumToAscII2Bytes(byte[] msg)
- //{
- // var checksum = this.CaculateCheckSum(msg);
- // var r = ASCIIEncoding.ASCII.GetBytes(checksum.ToString("X4"));
- // return r;
- //}
- //public override MessageTemplateBase Deserialize(byte[] rawData)
- //{
- // return base.Deserialize(rawData.Take(rawData.Length - 1).ToArray());
- //}
- public override byte[] Serialize(MessageTemplateBase message)
- {
- var serializedBytes = base.Serialize(message);
- if (message is MessageEntity.DispenserInterface.Outgoing.OutgoingMessageBase)
- {
- var dispenserIfMsg = message as MessageEntity.DispenserInterface.Outgoing.OutgoingMessageBase;
- var appendWithCheckSum = serializedBytes.Take(serializedBytes.Length - 1)
- .Concat(Encoding.ASCII.GetBytes(
- CaculateCheckSum(serializedBytes.Take(serializedBytes.Length - 1).ToArray()).ToString("X4")))
- .Concat(new byte[] { serializedBytes.Last() });
- return appendWithCheckSum.ToArray();
- }
- return serializedBytes;
- }
- }
- }
|