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); } } }