25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

72 satır
3.1 KiB

  1. using JT809.Protocol.Enums;
  2. using JT809.Protocol.Formatters;
  3. using JT809.Protocol.MessagePack;
  4. using JT809.Protocol.Extensions;
  5. using JT809.Protocol.Interfaces;
  6. using System.Text.Json;
  7. namespace JT809.Protocol.SubMessageBody
  8. {
  9. /// <summary>
  10. /// 下发车辆报文请求
  11. /// <para>子业务类型标识:DOWN_CTRL_MSG_TEXT_INFO</para>
  12. /// <para>描述:用于上级平台向下级平台下发报文到某指定车辆</para>
  13. /// </summary>
  14. public class JT809_0x9500_0x9503:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x9500_0x9503>, IJT809Analyze
  15. {
  16. public override ushort SubMsgId => JT809SubBusinessType.下发车辆报文请求.ToUInt16Value();
  17. public override string Description => "下发车辆报文请求";
  18. /// <summary>
  19. /// 消息ID序号
  20. /// </summary>
  21. public uint MsgSequence { get; set; }
  22. /// <summary>
  23. /// 报文优先级
  24. /// </summary>
  25. public JT809_0x9503_MsgPriority MsgPriority { get; set; }
  26. /// <summary>
  27. /// 报文信息长度
  28. /// </summary>
  29. public uint MsgLength { get; set; }
  30. /// <summary>
  31. /// 报文信息内容
  32. /// </summary>
  33. public string MsgContent { get; set; }
  34. public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
  35. {
  36. JT809_0x9500_0x9503 value = new JT809_0x9500_0x9503();
  37. value.MsgSequence = reader.ReadUInt32();
  38. writer.WriteNumber($"[{value.MsgSequence.ReadNumber()}]消息ID序号", value.MsgSequence);
  39. value.MsgPriority = (JT809_0x9503_MsgPriority)reader.ReadByte();
  40. writer.WriteString($"[{value.MsgPriority.ToByteValue()}]报文优先级", value.MsgPriority.ToString());
  41. value.MsgLength = reader.ReadUInt32();
  42. writer.WriteNumber($"[{ value.MsgLength.ReadNumber()}]报文信息长度", value.MsgLength);
  43. var virtualHex = reader.ReadVirtualArray((int)value.MsgLength);
  44. value.MsgContent = reader.ReadString((int)value.MsgLength);
  45. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]报文信息内容", value.MsgContent);
  46. }
  47. public JT809_0x9500_0x9503 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  48. {
  49. JT809_0x9500_0x9503 value = new JT809_0x9500_0x9503();
  50. value.MsgSequence = reader.ReadUInt32();
  51. value.MsgPriority = (JT809_0x9503_MsgPriority)reader.ReadByte();
  52. value.MsgLength = reader.ReadUInt32();
  53. value.MsgContent = reader.ReadString((int)value.MsgLength);
  54. return value;
  55. }
  56. public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9500_0x9503 value, IJT809Config config)
  57. {
  58. writer.WriteUInt32(value.MsgSequence);
  59. writer.WriteByte(value.MsgPriority.ToByteValue());
  60. // 先计算内容长度(汉字为两个字节)
  61. writer.Skip(4, out int lengthPosition);
  62. writer.WriteString(value.MsgContent);
  63. writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition);
  64. }
  65. }
  66. }