using System; using System.Linq; using System.Text; using TouchSocket.Sockets; namespace Rdh.SocketServer.Client.Models { /// /// 固定包头和包尾的适配器 参考文档 https://www.yuque.com/rrqm/touchsocket/55e5bbf58745fa639dba511c7bcd54d1 /// public class ElectronicMedicineKitBetweenAndDataHandlingAdapter : CustomBetweenAndDataHandlingAdapter { public ElectronicMedicineKitBetweenAndDataHandlingAdapter() { MinSize = 5; } public override byte[] StartCode => ElectronicMedicineKitBetweenAndRequestInfo.Header; public override byte[] EndCode => ElectronicMedicineKitBetweenAndRequestInfo.Footer; protected override ElectronicMedicineKitBetweenAndRequestInfo GetInstance() { return new ElectronicMedicineKitBetweenAndRequestInfo(); } } public class ElectronicMedicineKitBetweenAndRequestInfo : IBetweenAndRequestInfo { private const string _header = "***"; private const string _footer = "@@@"; private static Encoding _electronicMedicineKitEncoding = Encoding.GetEncoding("gb2312"); public static byte[] Header { get { return _electronicMedicineKitEncoding.GetBytes(_header); } } public static byte[] Footer { get { return _electronicMedicineKitEncoding.GetBytes(_footer); } } public static Encoding ElectronicMedicineKitEncoding { get { return _electronicMedicineKitEncoding; } } public string BoxId { get; private set; } public ElectronicMedicineKitFunctionTypes FunctionType { get; private set; } public string Data { get; private set; } public void OnParsingBody(byte[] body) { BoxId = _electronicMedicineKitEncoding.GetString(body.Take(3).ToArray()); FunctionType = (ElectronicMedicineKitFunctionTypes)Convert.ToByte(_electronicMedicineKitEncoding.GetString(body.Skip(3).Take(2).ToArray()), 16); if (body.Length > 5) { Data = _electronicMedicineKitEncoding.GetString(body.Skip(5).ToArray()); Data = Data.Trim('#'); } } public bool OnParsingEndCode(byte[] endCode) { return endCode.SequenceEqual(Footer); } public bool OnParsingStartCode(byte[] startCode) { return startCode.SequenceEqual(Header); } } }