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