25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.7 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. /// <summary>
  10. /// 终端注册应答
  11. /// </summary>
  12. public class JT808_0x8100 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8100>, IJT808Analyze
  13. {
  14. /// <summary>
  15. /// 0x8100
  16. /// </summary>
  17. public override ushort MsgId { get; } = 0x8100;
  18. /// <summary>
  19. /// 终端注册应答
  20. /// </summary>
  21. public override string Description => "终端注册应答";
  22. /// <summary>
  23. /// 应答流水号
  24. /// 对应的终端注册消息的流水号
  25. /// </summary>
  26. public ushort AckMsgNum { get; set; }
  27. /// <summary>
  28. /// 结果
  29. /// </summary>
  30. public JT808TerminalRegisterResult JT808TerminalRegisterResult { get; set; }
  31. /// <summary>
  32. /// 鉴权码
  33. /// 只有在成功后才有该字段
  34. /// </summary>
  35. public string Code { get; set; }
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. /// <param name="reader"></param>
  40. /// <param name="writer"></param>
  41. /// <param name="config"></param>
  42. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  43. {
  44. JT808_0x8100 value = new JT808_0x8100();
  45. value.AckMsgNum = reader.ReadUInt16();
  46. writer.WriteNumber($"[{ value.AckMsgNum.ReadNumber()}]应答流水号", value.AckMsgNum);
  47. value.JT808TerminalRegisterResult = (JT808TerminalRegisterResult)reader.ReadByte();
  48. writer.WriteNumber($"[{ ((byte)value.JT808TerminalRegisterResult).ReadNumber()}]结果-{value.JT808TerminalRegisterResult.ToString()}", (byte)value.JT808TerminalRegisterResult);
  49. // 只有在成功后才有该字段
  50. if (value.JT808TerminalRegisterResult == JT808TerminalRegisterResult.成功)
  51. {
  52. var codeBuffer = reader.ReadVirtualArray(reader.ReadCurrentRemainContentLength()).ToArray();
  53. value.Code = reader.ReadRemainStringContent();
  54. writer.WriteString($"[{codeBuffer.ToHexString()}]鉴权码", value.Code);
  55. }
  56. }
  57. /// <summary>
  58. ///
  59. /// </summary>
  60. /// <param name="reader"></param>
  61. /// <param name="config"></param>
  62. /// <returns></returns>
  63. public JT808_0x8100 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  64. {
  65. JT808_0x8100 value = new JT808_0x8100();
  66. value.AckMsgNum = reader.ReadUInt16();
  67. value.JT808TerminalRegisterResult = (JT808TerminalRegisterResult)reader.ReadByte();
  68. // 只有在成功后才有该字段
  69. if (value.JT808TerminalRegisterResult == JT808TerminalRegisterResult.成功)
  70. {
  71. value.Code = reader.ReadRemainStringContent();
  72. }
  73. return value;
  74. }
  75. /// <summary>
  76. ///
  77. /// </summary>
  78. /// <param name="writer"></param>
  79. /// <param name="value"></param>
  80. /// <param name="config"></param>
  81. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8100 value, IJT808Config config)
  82. {
  83. writer.WriteUInt16(value.AckMsgNum);
  84. writer.WriteByte((byte)value.JT808TerminalRegisterResult);
  85. // 只有在成功后才有该字段
  86. if (value.JT808TerminalRegisterResult == JT808TerminalRegisterResult.成功)
  87. {
  88. writer.WriteString(value.Code);
  89. }
  90. }
  91. }
  92. }