123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using Edge.Core.Processor;using Edge.Core.IndustryStandardInterface.Pump;
- using Edge.Core.Parser.BinaryParser.Util;
- using ProGauge_StartItaliana_Probe.MessageEntity;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Edge.Core.Processor.Communicator;
- namespace ProGauge_StartItaliana_Probe
- {
- public class MessageCutter : IMessageCutter<byte[]>
- {
- private readonly List<byte> buffer = new List<byte>();
-
- public byte[] Message { get; private 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]);
-
- if (this.buffer.Count >= 5
- && (!int.TryParse(Encoding.ASCII.GetString(this.buffer.Take(5).ToArray()), out int parsedAddressValue)
- || (parsedAddressValue < 0 || parsedAddressValue > 15))
- )
- {
- this.OnInvalidMessageRead?.Invoke(this,
- new MessageCutterInvalidMessageReadEventArg()
- {
- Message = "MessageCutter, Unknown starter 5 bytes: 0x" + this.buffer.ToHexLogString() + ", will drop and clear buffer"
- });
- this.buffer.Clear();
- }
- if (this.buffer.Count >= 7
- && this.buffer[this.buffer.Count - 2] == 0x0a
- && this.buffer[this.buffer.Count - 1] == 0x0d)
- {
- this.Message = this.buffer.ToArray();
- var safe = this.OnMessageCut;
- safe?.Invoke(this, null);
- this.buffer.Clear();
- }
- if (this.buffer.Count >= 60)
- {
- this.OnInvalidMessageRead?.Invoke(this,
- new MessageCutterInvalidMessageReadEventArg()
- {
- Message = "Long length(len: " + this.buffer.Count +
- ") message is still constructing in MsgCutter: 0x" + this.buffer.ToHexLogString() + ", will drop and clear buffer"
- });
- this.buffer.Clear();
- }
- }
- }
- }
- }
|