using JT809.Protocol.Enums;
using JT809.Protocol.Formatters;
using JT809.Protocol.MessagePack;
using JT809.Protocol.Extensions;
using JT809.Protocol.Interfaces;
using System.Text.Json;
namespace JT809.Protocol.SubMessageBody
{
///
/// 下发车辆报文请求
/// 子业务类型标识:DOWN_CTRL_MSG_TEXT_INFO
/// 描述:用于上级平台向下级平台下发报文到某指定车辆
///
public class JT809_0x9500_0x9503:JT809SubBodies, IJT809MessagePackFormatter, IJT809Analyze
{
public override ushort SubMsgId => JT809SubBusinessType.下发车辆报文请求.ToUInt16Value();
public override string Description => "下发车辆报文请求";
///
/// 消息ID序号
///
public uint MsgSequence { get; set; }
///
/// 报文优先级
///
public JT809_0x9503_MsgPriority MsgPriority { get; set; }
///
/// 报文信息长度
///
public uint MsgLength { get; set; }
///
/// 报文信息内容
///
public string MsgContent { get; set; }
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
JT809_0x9500_0x9503 value = new JT809_0x9500_0x9503();
value.MsgSequence = reader.ReadUInt32();
writer.WriteNumber($"[{value.MsgSequence.ReadNumber()}]消息ID序号", value.MsgSequence);
value.MsgPriority = (JT809_0x9503_MsgPriority)reader.ReadByte();
writer.WriteString($"[{value.MsgPriority.ToByteValue()}]报文优先级", value.MsgPriority.ToString());
value.MsgLength = reader.ReadUInt32();
writer.WriteNumber($"[{ value.MsgLength.ReadNumber()}]报文信息长度", value.MsgLength);
var virtualHex = reader.ReadVirtualArray((int)value.MsgLength);
value.MsgContent = reader.ReadString((int)value.MsgLength);
writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]报文信息内容", value.MsgContent);
}
public JT809_0x9500_0x9503 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
JT809_0x9500_0x9503 value = new JT809_0x9500_0x9503();
value.MsgSequence = reader.ReadUInt32();
value.MsgPriority = (JT809_0x9503_MsgPriority)reader.ReadByte();
value.MsgLength = reader.ReadUInt32();
value.MsgContent = reader.ReadString((int)value.MsgLength);
return value;
}
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9500_0x9503 value, IJT809Config config)
{
writer.WriteUInt32(value.MsgSequence);
writer.WriteByte(value.MsgPriority.ToByteValue());
// 先计算内容长度(汉字为两个字节)
writer.Skip(4, out int lengthPosition);
writer.WriteString(value.MsgContent);
writer.WriteInt32Return(writer.GetCurrentPosition() - lengthPosition - 4, lengthPosition);
}
}
}