using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using JT808.Protocol.Metadata; using System; using System.Collections.Generic; using System.Text.Json; namespace JT808.Protocol.MessageBody { /// /// 信息点播菜单设置 /// 0x8303 /// public class JT808_0x8303 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version { /// /// 0x8303 /// public override ushort MsgId { get; } = 0x8303; /// /// 信息点播菜单设置 /// public override string Description => "信息点播菜单设置"; /// /// 设置类型 /// /// public byte SettingType { get; set; } /// /// 信息项总数 /// public byte InformationItemCount { get; set; } /// /// 信息点播信息项组成数据 /// 信息项列表 /// public List InformationItems { get; set; } /// /// /// /// /// /// public JT808_0x8303 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8303 jT808_0X8303 = new JT808_0x8303(); jT808_0X8303.SettingType = reader.ReadByte(); jT808_0X8303.InformationItemCount = reader.ReadByte(); jT808_0X8303.InformationItems = new List(); for (var i = 0; i < jT808_0X8303.InformationItemCount; i++) { JT808InformationItemProperty jT808InformationItemProperty = new JT808InformationItemProperty(); jT808InformationItemProperty.InformationType = reader.ReadByte(); jT808InformationItemProperty.InformationLength = reader.ReadUInt16(); jT808InformationItemProperty.InformationName = reader.ReadString(jT808InformationItemProperty.InformationLength); jT808_0X8303.InformationItems.Add(jT808InformationItemProperty); } return jT808_0X8303; } /// /// /// /// /// /// public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8303 value, IJT808Config config) { writer.WriteByte(value.SettingType); writer.WriteByte((byte)value.InformationItems.Count); foreach (var item in value.InformationItems) { writer.WriteByte(item.InformationType); // 先计算内容长度(汉字为两个字节) writer.Skip(2, out int position); writer.WriteString(item.InformationName); ushort length = (ushort)(writer.GetCurrentPosition() - position - 2); writer.WriteUInt16Return(length, position); } } /// /// /// /// /// /// public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8303 value = new JT808_0x8303(); value.SettingType = reader.ReadByte(); writer.WriteNumber($"[{value.SettingType.ReadNumber()}]设置类型", value.SettingType); value.InformationItemCount = reader.ReadByte(); writer.WriteNumber($"[{value.InformationItemCount.ReadNumber()}]信息项总数", value.InformationItemCount); writer.WriteStartArray("信息项列表"); for (var i = 0; i < value.InformationItemCount; i++) { writer.WriteStartObject(); JT808InformationItemProperty jT808InformationItemProperty = new JT808InformationItemProperty(); jT808InformationItemProperty.InformationType = reader.ReadByte(); writer.WriteNumber($"[{jT808InformationItemProperty.InformationType.ReadNumber()}]信息类型", jT808InformationItemProperty.InformationType); jT808InformationItemProperty.InformationLength = reader.ReadUInt16(); writer.WriteNumber($"[{jT808InformationItemProperty.InformationLength.ReadNumber()}]信息名称长度", jT808InformationItemProperty.InformationLength); var infoBuffer = reader.ReadVirtualArray(jT808InformationItemProperty.InformationLength).ToArray(); jT808InformationItemProperty.InformationName = reader.ReadString(jT808InformationItemProperty.InformationLength); writer.WriteString($"[{infoBuffer.ToHexString()}]信息名称", jT808InformationItemProperty.InformationName); writer.WriteEndObject(); } writer.WriteEndArray(); } } }