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

66 lines
2.9 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessagePack;
  4. using JT808.Protocol.Metadata;
  5. using System.Collections.Generic;
  6. namespace JT808.Protocol.MessageBody
  7. {
  8. /// <summary>
  9. /// 存储多媒体数据检索应答
  10. /// 0x0802
  11. /// </summary>
  12. public class JT808_0x0802 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0802>, IJT808_2019_Version
  13. {
  14. public override ushort MsgId { get; } = 0x0802;
  15. /// <summary>
  16. /// 应答流水号
  17. /// 对应的多媒体数据检索消息的流水号
  18. /// </summary>
  19. public ushort MsgNum { get; set; }
  20. /// <summary>
  21. /// 多媒体数据总项数
  22. /// 满足检索条件的多媒体数据总项数
  23. /// </summary>
  24. public ushort MultimediaItemCount { get; set; }
  25. /// <summary>
  26. /// 检索项集合
  27. /// </summary>
  28. public List<JT808MultimediaSearchProperty> MultimediaSearchItems { get; set; }
  29. public JT808_0x0802 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  30. {
  31. JT808_0x0802 JT808_0x0802 = new JT808_0x0802();
  32. JT808_0x0802.MsgNum = reader.ReadUInt16();
  33. JT808_0x0802.MultimediaItemCount = reader.ReadUInt16();
  34. JT808_0x0802.MultimediaSearchItems = new List<JT808MultimediaSearchProperty>();
  35. for (var i = 0; i < JT808_0x0802.MultimediaItemCount; i++)
  36. {
  37. JT808MultimediaSearchProperty jT808MultimediaSearchProperty = new JT808MultimediaSearchProperty();
  38. jT808MultimediaSearchProperty.MultimediaId = reader.ReadUInt32();
  39. jT808MultimediaSearchProperty.MultimediaType = reader.ReadByte();
  40. jT808MultimediaSearchProperty.ChannelId = reader.ReadByte();
  41. jT808MultimediaSearchProperty.EventItemCoding = reader.ReadByte();
  42. JT808MessagePackReader positionReader = new JT808MessagePackReader(reader.ReadArray(28));
  43. jT808MultimediaSearchProperty.Position = config.GetMessagePackFormatter<JT808_0x0200>().Deserialize(ref positionReader, config);
  44. JT808_0x0802.MultimediaSearchItems.Add(jT808MultimediaSearchProperty);
  45. }
  46. return JT808_0x0802;
  47. }
  48. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0802 value, IJT808Config config)
  49. {
  50. writer.WriteUInt16(value.MsgNum);
  51. writer.WriteUInt16((ushort)value.MultimediaSearchItems.Count);
  52. foreach (var item in value.MultimediaSearchItems)
  53. {
  54. writer.WriteUInt32(item.MultimediaId);
  55. writer.WriteByte(item.MultimediaType);
  56. writer.WriteByte(item.ChannelId);
  57. writer.WriteByte(item.EventItemCoding);
  58. config.GetMessagePackFormatter<JT808_0x0200>().Serialize(ref writer, item.Position, config);
  59. }
  60. }
  61. }
  62. }