/// <summary>
/// 固定长度数据接受适配器
/// </summary>
public class FixedSizeDataReceiveAdapter
{
private readonly int _packetSize;
public List<byte> Data { get; set; } = new List<byte>();
/// <summary>
/// 定长数据长度
/// </summary>
/// <param name="packetSize"></param>
public FixedSizeDataReceiveAdapter(int packetSize)
{
_packetSize = packetSize;
}
public event Action<byte[]> ReceiveAllPackDataEvent;
/// <summary>
/// 收到的数据
/// </summary>
/// <param name="data"></param>
public void ReceiveData(byte[] data)
{
Data.AddRange(data);
do
{
if (Data.Count < _packetSize)
{
// 下次数据到达处理
return;
}
if (Data.Count >= data.Length)
{
var bodyData = Data.GetRange(0, _packetSize).ToArray();
ReceiveAllPackDataEvent?.Invoke(bodyData);
// 再移除已经读了的数据
Data.RemoveRange(0, _packetSize);
// 没有数据了就返回了
if (Data.Count == 0)
{
break;
}
}
} while (true);
}
}