using TouchSocket.Sockets; namespace AdapterConsoleApp { /// /// 模板解析“固定包头”数据适配器 /// public class MyFixedHeaderCustomDataHandlingAdapter : CustomFixedHeaderDataHandlingAdapter { public MyFixedHeaderCustomDataHandlingAdapter() { this.MaxPackageSize = 1024; } /// /// 接口实现,指示固定包头长度 /// public override int HeaderLength => 3; public override bool CanSendRequestInfo => false; /// /// 获取新实例 /// /// protected override MyFixedHeaderRequestInfo GetInstance() { return new MyFixedHeaderRequestInfo(); } protected override void PreviewSend(IRequestInfo requestInfo, bool isAsync) { throw new System.NotImplementedException(); } } public class MyFixedHeaderRequestInfo : IFixedHeaderRequestInfo { private int bodyLength; /// /// 接口实现,标识数据长度 /// public int BodyLength { get { return bodyLength; } } private byte dataType; /// /// 自定义属性,标识数据类型 /// public byte DataType { get { return dataType; } } private byte orderType; /// /// 自定义属性,标识指令类型 /// public byte OrderType { get { return orderType; } } private byte[] body; /// /// 自定义属性,标识实际数据 /// public byte[] Body { get { return body; } } public bool OnParsingBody(byte[] body) { if (body.Length == this.bodyLength) { this.body = body; return true; } return false; } public bool OnParsingHeader(byte[] header) { //在该示例中,第一个字节表示后续的所有数据长度,但是header设置的是3,所以后续还应当接收length-2个长度。 this.bodyLength = header[0] - 2; this.dataType = header[1]; this.orderType = header[2]; return true; } } }