RawBufferFrameBuilder.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using MECF.Framework.Common.Communications.Tcp.Socket.Framing.Base;
  2. namespace MECF.Framework.Common.Communications.Tcp.Socket.Framing
  3. {
  4. public sealed class RawBufferFrameBuilder : FrameBuilder
  5. {
  6. public RawBufferFrameBuilder()
  7. : this(new RawBufferFrameEncoder(), new RawBufferFrameDecoder())
  8. {
  9. }
  10. public RawBufferFrameBuilder(RawBufferFrameEncoder encoder, RawBufferFrameDecoder decoder)
  11. : base(encoder, decoder)
  12. {
  13. }
  14. }
  15. public sealed class RawBufferFrameEncoder : IFrameEncoder
  16. {
  17. public RawBufferFrameEncoder()
  18. {
  19. }
  20. public void EncodeFrame(byte[] payload, int offset, int count, out byte[] frameBuffer, out int frameBufferOffset, out int frameBufferLength)
  21. {
  22. frameBuffer = payload;
  23. frameBufferOffset = offset;
  24. frameBufferLength = count;
  25. }
  26. }
  27. public sealed class RawBufferFrameDecoder : IFrameDecoder
  28. {
  29. public RawBufferFrameDecoder()
  30. {
  31. }
  32. public bool TryDecodeFrame(byte[] buffer, int offset, int count, out int frameLength, out byte[] payload, out int payloadOffset, out int payloadCount)
  33. {
  34. frameLength = 0;
  35. payload = null;
  36. payloadOffset = 0;
  37. payloadCount = 0;
  38. if (count <= 0)
  39. return false;
  40. frameLength = count;
  41. payload = buffer;
  42. payloadOffset = offset;
  43. payloadCount = count;
  44. return true;
  45. }
  46. }
  47. }