using NewLife;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
namespace NDSD_Screwdriver.Tool
{
public class MyFixedHeaderRequestInfo : IFixedHeaderRequestInfo
{
///
/// 接口实现,标识数据长度
///
public int BodyLength { get; private set; }
///
/// 自定义属性,标识数据类型
///
public byte DataType { get; set; }
///
/// 自定义属性,标识指令类型
///
public byte OrderType { get; set; }
///
/// 自定义属性,标识实际数据
///
public byte[] Body { get; set; }
public string GetBody()
{
// 方法1: 使用 Array.Copy
byte[] copiedBytes = new byte[BodyLength - 2];
Array.Copy(Body, 0, copiedBytes, 0, BodyLength - 2);
Array.Reverse(copiedBytes);
return copiedBytes.ToHex();
}
public bool OnParsingBody(ReadOnlySpan body)
{
if (body.Length == this.BodyLength)
{
this.Body = body.ToArray();
return true;
}
return false;
}
public bool OnParsingHeader(ReadOnlySpan header)
{
//在该示例中,第一个字节表示后续的所有数据长度,但是header设置的是3,所以后续还应当接收length-2个长度。
this.BodyLength = header[2] + 2;
this.DataType = header[0];
this.OrderType = header[1];
return true;
}
}
public class MyFixedHeaderCustomDataHandlingAdapter : CustomFixedHeaderDataHandlingAdapter
{
///
/// 接口实现,指示固定包头长度
///
public override int HeaderLength => 3;
///
/// 获取新实例
///
///
protected override MyFixedHeaderRequestInfo GetInstance()
{
return new MyFixedHeaderRequestInfo();
}
}
}