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