Setup.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Edge.Core.Parser.BinaryParser;
  2. using Edge.Core.Parser.BinaryParser.Attributes;
  3. using Edge.Core.Parser.BinaryParser.MessageEntity;
  4. using Edge.Core.Processor.Communicator;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. namespace TestComPortServer
  10. {
  11. public class Message : MessageTemplateBase
  12. {
  13. [Format(4, EncodingType.BIN, -9999)]
  14. public int Id { get; set; }
  15. [Format(10, EncodingType.ASCII, -9900)]
  16. public String Description { get; set; }
  17. }
  18. public class MessageCutter : IMessageCutter<byte[]>
  19. {
  20. private object sync_object = new object();
  21. private List<byte> buffer = new List<byte>();
  22. public byte[] Message { get; private set; }
  23. public event EventHandler OnMessageCut;
  24. public event EventHandler<MessageCutterInvalidMessageReadEventArg> OnInvalidMessageRead;
  25. public void Feed(byte[] data)
  26. {
  27. lock (this.sync_object)
  28. for (int i = 0; i < data.Length; i++)
  29. {
  30. if (this.buffer.Count == 0 && data[i] != 0xFA)
  31. continue;
  32. buffer.Add(data[i]);
  33. if (buffer.Last() == 0xFF)
  34. {
  35. this.Message = this.buffer.ToArray();
  36. this.OnMessageCut?.Invoke(this, null);
  37. this.buffer.Clear();
  38. }
  39. }
  40. }
  41. }
  42. public class MessageParser : ParserBase
  43. {
  44. public MessageParser() : base(new MessageLookup())
  45. {
  46. }
  47. public override byte[] Serialize(MessageTemplateBase message)
  48. {
  49. return (new byte[] { 0xFA }.Concat(base.Serialize(message)).Concat(new byte[] { 0xFF })).ToArray();
  50. }
  51. public override MessageTemplateBase Deserialize(byte[] rawData)
  52. {
  53. var m = base.Deserialize(rawData.Skip(1).Take(rawData.Length - 2).ToArray());
  54. return m;
  55. }
  56. }
  57. public class MessageLookup : IMessageTemplateLookup
  58. {
  59. public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
  60. {
  61. return new Message();
  62. }
  63. }
  64. }