1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump;
- using Edge.Core.Parser.BinaryParser.Util;
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Edge.Core.Processor.Communicator;
- namespace VeederRoot_ATG_Console
- {
- public class MessageCutter : IMessageCutter<byte[]>
- {
- static NLog.Logger innerLogger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("Communicator");
- private readonly List<byte> buffer = new List<byte>();
- public byte[] Message { get; set; }
- public event EventHandler OnMessageCut;
- public event EventHandler<MessageCutterInvalidMessageReadEventArg> OnInvalidMessageRead;
- public void Feed(byte[] data)
- {
- for (int i = 0; i < data.Length; i++)
- {
- this.buffer.Add(data[i]);
- //SOH
- if (this.buffer[0] != 0x01)
- {
- this.OnInvalidMessageRead?.Invoke(this,
- new MessageCutterInvalidMessageReadEventArg()
- {
- Message =
- "invalid byte[0]: 0x"
- + this.buffer[0].ToString("x2")
- + " clear buf and continue reading..."
- });
- this.buffer.Clear();
- continue;
- }
- //ETX
- if (this.buffer[this.buffer.Count - 1] == 0x03)
- {
- this.Message = this.buffer.ToArray();
- var safe = this.OnMessageCut;
- safe?.Invoke(this, null);
- this.buffer.Clear();
- }
- if (this.buffer.Count >= 500)
- innerLogger.Info("Long length(len: " + this.buffer.Count + ") message is still constructing in MsgCutter: 0x" + this.buffer.ToHexLogString());
- }
- }
- }
- }
|