using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Text.Json;
namespace JT808.Protocol.MessageBody
{
///
/// 多媒体数据上传应答
/// 0x8800
///
public class JT808_0x8800 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
{
///
/// 0x8800
///
public override ushort MsgId { get; } = 0x8800;
///
/// 多媒体数据上传应答
///
public override string Description => "多媒体数据上传应答";
///
/// 多媒体ID
///
public uint MultimediaId { get; set; }
///
/// 重传包总数
///
public byte RetransmitPackageCount { get; set; }
///
/// 重传包 ID 列表
/// 重传包序号顺序排列,如“包 ID1 包 ID2......包 IDn”。
///
public byte[] RetransmitPackageIds { get; set; }
///
///
///
///
///
///
public JT808_0x8800 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8800 jT808_0X8800 = new JT808_0x8800();
jT808_0X8800.MultimediaId = reader.ReadUInt32();
jT808_0X8800.RetransmitPackageCount = reader.ReadByte();
jT808_0X8800.RetransmitPackageIds = reader.ReadArray(jT808_0X8800.RetransmitPackageCount * 2).ToArray();
return jT808_0X8800;
}
///
///
///
///
///
///
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8800 value, IJT808Config config)
{
writer.WriteUInt32(value.MultimediaId);
writer.WriteByte((byte)(value.RetransmitPackageIds.Length / 2));
writer.WriteArray(value.RetransmitPackageIds);
}
///
///
///
///
///
///
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8800 value = new JT808_0x8800();
value.MultimediaId = reader.ReadUInt32();
value.RetransmitPackageCount = reader.ReadByte();
value.RetransmitPackageIds = reader.ReadArray(value.RetransmitPackageCount * 2).ToArray();
writer.WriteNumber($"[{ value.MultimediaId.ReadNumber()}]多媒体ID", value.MultimediaId);
writer.WriteNumber($"[{ value.RetransmitPackageCount.ReadNumber()}]重传包总数", value.RetransmitPackageCount);
writer.WriteString($"重传包", value.RetransmitPackageIds.ToHexString());
writer.WriteStartArray($"重传包ID列表");
ReadOnlySpan tmp = value.RetransmitPackageIds;
for(int i=0; i< value.RetransmitPackageCount; i++)
{
writer.WriteStringValue($"{tmp.Slice(i*2 , 2).ToArray().ToHexString()}");
}
writer.WriteEndArray();
}
}
}