电子药箱通讯服务端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ElectronicMedicineKitBetweenAndDataHandlingAdapter.cs 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4. using TouchSocket.Sockets;
  5. namespace Rdh.SocketServer.Client.Models
  6. {
  7. /// <summary>
  8. /// 固定包头和包尾的适配器 参考文档 https://www.yuque.com/rrqm/touchsocket/55e5bbf58745fa639dba511c7bcd54d1
  9. /// </summary>
  10. public class ElectronicMedicineKitBetweenAndDataHandlingAdapter : CustomBetweenAndDataHandlingAdapter<ElectronicMedicineKitBetweenAndRequestInfo>
  11. {
  12. public ElectronicMedicineKitBetweenAndDataHandlingAdapter() { MinSize = 5; }
  13. public override byte[] StartCode => ElectronicMedicineKitBetweenAndRequestInfo.Header;
  14. public override byte[] EndCode => ElectronicMedicineKitBetweenAndRequestInfo.Footer;
  15. protected override ElectronicMedicineKitBetweenAndRequestInfo GetInstance()
  16. {
  17. return new ElectronicMedicineKitBetweenAndRequestInfo();
  18. }
  19. }
  20. public class ElectronicMedicineKitBetweenAndRequestInfo : IBetweenAndRequestInfo
  21. {
  22. private const string _header = "***";
  23. private const string _footer = "@@@";
  24. private static Encoding _electronicMedicineKitEncoding = Encoding.GetEncoding("gb2312");
  25. public static byte[] Header { get { return _electronicMedicineKitEncoding.GetBytes(_header); } }
  26. public static byte[] Footer { get { return _electronicMedicineKitEncoding.GetBytes(_footer); } }
  27. public static Encoding ElectronicMedicineKitEncoding { get { return _electronicMedicineKitEncoding; } }
  28. public string BoxId { get; private set; }
  29. public ElectronicMedicineKitFunctionTypes FunctionType { get; private set; }
  30. public string Data { get; private set; }
  31. public void OnParsingBody(byte[] body)
  32. {
  33. BoxId = _electronicMedicineKitEncoding.GetString(body.Take(3).ToArray());
  34. FunctionType = (ElectronicMedicineKitFunctionTypes)Convert.ToByte(_electronicMedicineKitEncoding.GetString(body.Skip(3).Take(2).ToArray()), 16);
  35. if (body.Length > 5)
  36. {
  37. Data = _electronicMedicineKitEncoding.GetString(body.Skip(5).ToArray());
  38. Data = Data.Trim('#');
  39. }
  40. }
  41. public bool OnParsingEndCode(byte[] endCode)
  42. {
  43. return endCode.SequenceEqual(Footer);
  44. }
  45. public bool OnParsingStartCode(byte[] startCode)
  46. {
  47. return startCode.SequenceEqual(Header);
  48. }
  49. }
  50. }