using JT808.Protocol.Extensions;
using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System.Collections.Generic;
using System.Text.Json;
namespace JT808.Protocol.MessageBody
{
///
/// 摄像头立即拍摄命令应答
/// 0x0805
///
public class JT808_0x0805 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version
{
public override ushort MsgId { get; } = 0x0805;
public override string Description => "摄像头立即拍摄命令应答";
///
/// 应答流水号
/// 对应平台摄像头立即拍摄命令的消息流水号
///
public ushort ReplyMsgNum { get; set; }
///
/// 结果
/// 0:成功;1:失败;2:通道不支持。以下字段在结果=0 时才有效。
///
public byte Result { get; set; }
///
/// 多媒体ID个数
/// 拍摄成功的多媒体个数
///
public ushort MultimediaIdCount { get; set; }
///
/// 多媒体ID列表
///
public List MultimediaIds { get; set; }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x0805 value = new JT808_0x0805();
value.ReplyMsgNum = reader.ReadUInt16();
writer.WriteNumber($"[{value.ReplyMsgNum.ReadNumber()}]应答流水号", value.ReplyMsgNum);
value.Result = reader.ReadByte();
string result = "成功";
switch (value.Result)
{
case 1:
result = "失败";
break;
case 2:
result = "通道不支持";
break;
}
writer.WriteNumber($"[{value.Result.ReadNumber()}]结果-{result}", value.Result);
if (value.Result == 0)
{
value.MultimediaIdCount = reader.ReadUInt16();
writer.WriteNumber($"[{value.MultimediaIdCount.ReadNumber()}]多媒体ID个数", value.MultimediaIdCount);
writer.WriteStartArray("多媒体ID列表");
for (var i = 0; i < value.MultimediaIdCount; i++)
{
writer.WriteStartObject();
uint id = reader.ReadUInt32();
writer.WriteNumber($"[{id.ReadNumber()}]ID{i+1}", id);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
}
public JT808_0x0805 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x0805 value = new JT808_0x0805();
value.ReplyMsgNum = reader.ReadUInt16();
value.Result = reader.ReadByte();
if (value.Result == 0)
{
value.MultimediaIdCount = reader.ReadUInt16();
value.MultimediaIds = new List();
for (var i = 0; i < value.MultimediaIdCount; i++)
{
uint id = reader.ReadUInt32();
value.MultimediaIds.Add(id);
}
}
return value;
}
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0805 value, IJT808Config config)
{
writer.WriteUInt16(value.ReplyMsgNum);
writer.WriteByte(value.Result);
if (value.Result == 0)
{
writer.WriteUInt16((ushort)value.MultimediaIds.Count);
foreach (var item in value.MultimediaIds)
{
writer.WriteUInt32(item);
}
}
}
}
}