12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using Edge.Core.Parser.BinaryParser;
- using Edge.Core.Parser.BinaryParser.Attributes;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using Edge.Core.Processor.Communicator;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace TestComPortServer
- {
- public class Message : MessageTemplateBase
- {
- [Format(4, EncodingType.BIN, -9999)]
- public int Id { get; set; }
- [Format(10, EncodingType.ASCII, -9900)]
- public String Description { get; set; }
- }
- public class MessageCutter : IMessageCutter<byte[]>
- {
- private object sync_object = new object();
- private 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)
- {
- lock (this.sync_object)
- for (int i = 0; i < data.Length; i++)
- {
- if (this.buffer.Count == 0 && data[i] != 0xFA)
- continue;
- buffer.Add(data[i]);
- if (buffer.Last() == 0xFF)
- {
- this.Message = this.buffer.ToArray();
- this.OnMessageCut?.Invoke(this, null);
- this.buffer.Clear();
- }
- }
- }
- }
- public class MessageParser : ParserBase
- {
- public MessageParser() : base(new MessageLookup())
- {
- }
- public override byte[] Serialize(MessageTemplateBase message)
- {
- return (new byte[] { 0xFA }.Concat(base.Serialize(message)).Concat(new byte[] { 0xFF })).ToArray();
- }
- public override MessageTemplateBase Deserialize(byte[] rawData)
- {
- var m = base.Deserialize(rawData.Skip(1).Take(rawData.Length - 2).ToArray());
- return m;
- }
- }
- public class MessageLookup : IMessageTemplateLookup
- {
- public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
- {
- return new Message();
- }
- }
- }
|