You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.5 KiB

  1. using JT808.Protocol.Extensions;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.Interfaces;
  4. using JT808.Protocol.MessagePack;
  5. using System;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. /// <summary>
  10. /// 多媒体数据上传应答
  11. /// 0x8800
  12. /// </summary>
  13. public class JT808_0x8800 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8800>, IJT808Analyze
  14. {
  15. /// <summary>
  16. /// 0x8800
  17. /// </summary>
  18. public override ushort MsgId { get; } = 0x8800;
  19. /// <summary>
  20. /// 多媒体数据上传应答
  21. /// </summary>
  22. public override string Description => "多媒体数据上传应答";
  23. /// <summary>
  24. /// 多媒体ID
  25. /// </summary>
  26. public uint MultimediaId { get; set; }
  27. /// <summary>
  28. /// 重传包总数
  29. /// </summary>
  30. public byte RetransmitPackageCount { get; set; }
  31. /// <summary>
  32. /// 重传包 ID 列表
  33. /// 重传包序号顺序排列,如“包 ID1 包 ID2......包 IDn”。
  34. /// </summary>
  35. public byte[] RetransmitPackageIds { get; set; }
  36. /// <summary>
  37. ///
  38. /// </summary>
  39. /// <param name="reader"></param>
  40. /// <param name="config"></param>
  41. /// <returns></returns>
  42. public JT808_0x8800 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  43. {
  44. JT808_0x8800 jT808_0X8800 = new JT808_0x8800();
  45. jT808_0X8800.MultimediaId = reader.ReadUInt32();
  46. jT808_0X8800.RetransmitPackageCount = reader.ReadByte();
  47. jT808_0X8800.RetransmitPackageIds = reader.ReadArray(jT808_0X8800.RetransmitPackageCount * 2).ToArray();
  48. return jT808_0X8800;
  49. }
  50. /// <summary>
  51. ///
  52. /// </summary>
  53. /// <param name="writer"></param>
  54. /// <param name="value"></param>
  55. /// <param name="config"></param>
  56. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8800 value, IJT808Config config)
  57. {
  58. writer.WriteUInt32(value.MultimediaId);
  59. writer.WriteByte((byte)(value.RetransmitPackageIds.Length / 2));
  60. writer.WriteArray(value.RetransmitPackageIds);
  61. }
  62. /// <summary>
  63. ///
  64. /// </summary>
  65. /// <param name="reader"></param>
  66. /// <param name="writer"></param>
  67. /// <param name="config"></param>
  68. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  69. {
  70. JT808_0x8800 value = new JT808_0x8800();
  71. value.MultimediaId = reader.ReadUInt32();
  72. value.RetransmitPackageCount = reader.ReadByte();
  73. value.RetransmitPackageIds = reader.ReadArray(value.RetransmitPackageCount * 2).ToArray();
  74. writer.WriteNumber($"[{ value.MultimediaId.ReadNumber()}]多媒体ID", value.MultimediaId);
  75. writer.WriteNumber($"[{ value.RetransmitPackageCount.ReadNumber()}]重传包总数", value.RetransmitPackageCount);
  76. writer.WriteString($"重传包", value.RetransmitPackageIds.ToHexString());
  77. writer.WriteStartArray($"重传包ID列表");
  78. ReadOnlySpan<byte> tmp = value.RetransmitPackageIds;
  79. for(int i=0; i< value.RetransmitPackageCount; i++)
  80. {
  81. writer.WriteStringValue($"{tmp.Slice(i*2 , 2).ToArray().ToHexString()}");
  82. }
  83. writer.WriteEndArray();
  84. }
  85. }
  86. }