Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

83 rader
3.2 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessagePack;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.Json;
  9. namespace JT808.Protocol.Extensions.JT1078.MessageBody
  10. {
  11. /// <summary>
  12. /// 终端上传音视频资源列表
  13. /// </summary>
  14. public class JT808_0x1205 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1205>, IJT808Analyze
  15. {
  16. public override string Description => "终端上传音视频资源列表";
  17. public override ushort MsgId => 0x1205;
  18. /// <summary>
  19. /// 流水号
  20. /// </summary>
  21. public ushort MsgNum { get; set; }
  22. /// <summary>
  23. /// 音视频资源总数
  24. /// </summary>
  25. public uint AVResouceTotal{ get; set; }
  26. /// <summary>
  27. /// 音视频资源列表
  28. /// </summary>
  29. public List<JT808_0x1205_AVResouce> AVResouces { get; set; }
  30. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  31. {
  32. JT808_0x1205 value = new JT808_0x1205();
  33. value.MsgNum = reader.ReadUInt16();
  34. writer.WriteNumber($"[{value.MsgNum.ReadNumber()}]流水号", value.MsgNum);
  35. value.AVResouceTotal = reader.ReadUInt32();
  36. writer.WriteNumber($"[{value.AVResouceTotal.ReadNumber()}]音视频资源总数", value.AVResouceTotal);
  37. writer.WriteStartArray("音视频资源列表");
  38. var formatter = config.GetMessagePackFormatter<JT808_0x1205_AVResouce>();
  39. for (int i = 0; i < value.AVResouceTotal; i++)
  40. {
  41. writer.WriteStartObject();
  42. formatter.Analyze(ref reader, writer, config);
  43. writer.WriteEndObject();
  44. }
  45. writer.WriteEndArray();
  46. }
  47. public JT808_0x1205 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  48. {
  49. JT808_0x1205 jT808_0x1205 = new JT808_0x1205();
  50. jT808_0x1205.MsgNum = reader.ReadUInt16();
  51. jT808_0x1205.AVResouceTotal = reader.ReadUInt32();
  52. var channelTotal = jT808_0x1205.AVResouceTotal;//音视频资源总数
  53. if (channelTotal > 0)
  54. {
  55. jT808_0x1205.AVResouces = new List<JT808_0x1205_AVResouce>();
  56. var formatter = config.GetMessagePackFormatter<JT808_0x1205_AVResouce>();
  57. for (int i = 0; i < channelTotal; i++)
  58. {
  59. jT808_0x1205.AVResouces.Add(formatter.Deserialize(ref reader, config));
  60. }
  61. }
  62. return jT808_0x1205;
  63. }
  64. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1205 value, IJT808Config config)
  65. {
  66. writer.WriteUInt16(value.MsgNum);
  67. writer.WriteUInt32(value.AVResouceTotal);
  68. if (value.AVResouces.Any())
  69. {
  70. var formatter = config.GetMessagePackFormatter<JT808_0x1205_AVResouce>();
  71. foreach (var AVResouce in value.AVResouces)
  72. {
  73. formatter.Serialize(ref writer, AVResouce, config);
  74. }
  75. }
  76. }
  77. }
  78. }