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(); } } }