Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

67 строки
2.8 KiB

  1. using JT808.Protocol.Formatters;
  2. using JT808.Protocol.Interfaces;
  3. using JT808.Protocol.MessagePack;
  4. using System.Text.Json;
  5. namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
  6. {
  7. /// <summary>
  8. /// 文件上传完成消息
  9. /// </summary>
  10. public class JT808_0x1212 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x1212>, IJT808Analyze
  11. {
  12. public override string Description => "文件上传完成消息";
  13. /// <summary>
  14. /// 文件名称长度
  15. /// </summary>
  16. public byte FileNameLength { get; set; }
  17. /// <summary>
  18. /// 文件名称
  19. /// <文件类型>_<通道号>_<报警类型>_<序号>_<报警编号>.<后缀名>
  20. /// </summary>
  21. public string FileName { get; set; }
  22. /// <summary>
  23. /// 文件类型
  24. /// </summary>
  25. public byte FileType { get; set; }
  26. /// <summary>
  27. /// 文件大小
  28. /// </summary>
  29. public uint FileSize { get; set; }
  30. public override ushort MsgId => 0x1212;
  31. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  32. {
  33. JT808_0x1212 value = new JT808_0x1212();
  34. value.FileNameLength = reader.ReadByte();
  35. writer.WriteNumber($"[{value.FileNameLength.ReadNumber()}]文件名称长度", value.FileNameLength);
  36. string fileNameHex = reader.ReadVirtualArray(value.FileNameLength).ToArray().ToHexString();
  37. value.FileName = reader.ReadString(value.FileNameLength);
  38. writer.WriteString($"[{fileNameHex}]文件名称", value.FileName);
  39. value.FileType = reader.ReadByte();
  40. writer.WriteNumber($"[{value.FileType.ReadNumber()}]文件类型", value.FileType);
  41. value.FileSize = reader.ReadUInt32();
  42. writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小", value.FileSize);
  43. }
  44. public JT808_0x1212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  45. {
  46. JT808_0x1212 value = new JT808_0x1212();
  47. value.FileNameLength = reader.ReadByte();
  48. value.FileName = reader.ReadString(value.FileNameLength);
  49. value.FileType = reader.ReadByte();
  50. value.FileSize = reader.ReadUInt32();
  51. return value;
  52. }
  53. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1212 value, IJT808Config config)
  54. {
  55. writer.Skip(1, out int FileNameLengthPosition);
  56. writer.WriteString(value.FileName);
  57. writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition);
  58. writer.WriteByte(value.FileType);
  59. writer.WriteUInt32(value.FileSize);
  60. }
  61. }
  62. }