您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

110 行
4.3 KiB

  1. using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.MessagePack;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
  8. {
  9. /// <summary>
  10. /// 报警附件信息消息
  11. /// </summary>
  12. public class JT808_0x1210:JT808Bodies, IJT808MessagePackFormatter<JT808_0x1210>
  13. {
  14. /// <summary>
  15. /// 终端ID
  16. /// 7 个字节,由大写字母和数字组成,此终端ID 由制造商自行定义,位数不足时,后补“0x00”
  17. /// </summary>
  18. public string TerminalID { get; set; }
  19. /// <summary>
  20. /// 报警标识号
  21. /// </summary>
  22. public AlarmIdentificationProperty AlarmIdentification { get; set; }
  23. /// <summary>
  24. /// 平台给报警分配的唯一编号
  25. /// 32
  26. /// </summary>
  27. public string AlarmId { get; set; }
  28. /// <summary>
  29. /// 信息类型
  30. /// 0x00:正常报警文件信息
  31. /// 0x01:补传报警文件信息
  32. /// </summary>
  33. public byte InfoType { get; set; }
  34. /// <summary>
  35. /// 附件数量
  36. /// </summary>
  37. public byte AttachCount { get; set; }
  38. /// <summary>
  39. /// 附件信息列表
  40. /// </summary>
  41. public List<AttachProperty> AttachInfos { get; set; }
  42. public override ushort MsgId => 0x1210;
  43. public override string Description => "报警附件信息消息";
  44. public JT808_0x1210 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  45. {
  46. JT808_0x1210 jT808_0X1210 = new JT808_0x1210();
  47. jT808_0X1210.TerminalID = reader.ReadString(7);
  48. jT808_0X1210.AlarmIdentification = new AlarmIdentificationProperty
  49. {
  50. TerminalID = reader.ReadString(7),
  51. Time = reader.ReadDateTime6(),
  52. SN = reader.ReadByte(),
  53. AttachCount = reader.ReadByte(),
  54. Retain = reader.ReadByte()
  55. };
  56. jT808_0X1210.AlarmId = reader.ReadString(32);
  57. jT808_0X1210.InfoType = reader.ReadByte();
  58. jT808_0X1210.AttachCount = reader.ReadByte();
  59. if (jT808_0X1210.AttachCount > 0)
  60. {
  61. jT808_0X1210.AttachInfos = new List<AttachProperty>();
  62. for (int i = 0; i < jT808_0X1210.AttachCount; i++)
  63. {
  64. AttachProperty attachProperty = new AttachProperty();
  65. attachProperty.FileNameLength = reader.ReadByte();
  66. attachProperty.FileName = reader.ReadString(attachProperty.FileNameLength);
  67. attachProperty.FileSize = reader.ReadUInt32();
  68. jT808_0X1210.AttachInfos.Add(attachProperty);
  69. }
  70. }
  71. return jT808_0X1210;
  72. }
  73. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1210 value, IJT808Config config)
  74. {
  75. writer.WriteString(value.TerminalID.PadRight(7, '0'));
  76. if (value.AlarmIdentification == null)
  77. {
  78. throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
  79. }
  80. writer.WriteString(value.AlarmIdentification.TerminalID);
  81. writer.WriteDateTime6(value.AlarmIdentification.Time);
  82. writer.WriteByte(value.AlarmIdentification.SN);
  83. writer.WriteByte(value.AlarmIdentification.AttachCount);
  84. writer.WriteByte(value.AlarmIdentification.Retain);
  85. writer.WriteString(value.AlarmId);
  86. writer.WriteByte(value.InfoType);
  87. if (value.AttachInfos != null && value.AttachInfos.Count > 0)
  88. {
  89. writer.WriteByte((byte)value.AttachInfos.Count);
  90. foreach (var item in value.AttachInfos)
  91. {
  92. writer.Skip(1, out int FileNameLengthPosition);
  93. writer.WriteString(item.FileName);
  94. writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition);
  95. writer.WriteUInt32(item.FileSize);
  96. }
  97. }
  98. else
  99. {
  100. writer.WriteByte(0);
  101. }
  102. }
  103. }
  104. }