Sic.Framework/MECF.Framework.Common/MECF/Framework/Common/Communications/Tcp/Socket/Framing/LineBasedFrameEncoder.cs

37 lines
1017 B
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
using System;
using MECF.Framework.Common.Communications.Tcp.Socket.Framing.Base;
namespace MECF.Framework.Common.Communications.Tcp.Socket.Framing
{
public sealed class LineBasedFrameEncoder : IFrameEncoder
{
private readonly LineDelimiter _delimiter;
public LineDelimiter LineDelimiter => _delimiter;
public LineBasedFrameEncoder()
: this(LineDelimiter.CRLF)
{
}
public LineBasedFrameEncoder(LineDelimiter delimiter)
{
if (delimiter == null)
{
throw new ArgumentNullException("delimiter");
}
_delimiter = delimiter;
}
public void EncodeFrame(byte[] payload, int offset, int count, out byte[] frameBuffer, out int frameBufferOffset, out int frameBufferLength)
{
byte[] array = new byte[count + _delimiter.DelimiterBytes.Length];
Array.Copy(payload, offset, array, 0, count);
Array.Copy(_delimiter.DelimiterBytes, 0, array, count, _delimiter.DelimiterBytes.Length);
frameBuffer = array;
frameBufferOffset = 0;
frameBufferLength = array.Length;
}
}
}