using JT808.Protocol.Extensions.JTActiveSafety.Enums; using JT808.Protocol.Extensions.JTActiveSafety.MessageBody; using JT808.Protocol.Formatters; using JT808.Protocol.MessagePack; using System; using System.Collections.Generic; using System.Text; namespace JT808.Protocol.Extensions.JTActiveSafety.Formatters { public class JT808_JTActiveSafety_0x0900_Formatter : IJT808MessagePackFormatter { public JT808_JTActiveSafety_0x0900 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_JTActiveSafety_0x0900 jT808_JTActiveSafety_0X0900 = new JT808_JTActiveSafety_0x0900(); jT808_JTActiveSafety_0X0900.USBMessageCount = reader.ReadByte(); if (jT808_JTActiveSafety_0X0900.USBMessageCount > 0) { jT808_JTActiveSafety_0X0900.USBMessages = new List(); for (int i = 0; i < jT808_JTActiveSafety_0X0900.USBMessageCount; i++) { JT808_JTActiveSafety_0x0900_USBMessage jT808_JTActiveSafety_0X0900_USBMessage = new JT808_JTActiveSafety_0x0900_USBMessage(); jT808_JTActiveSafety_0X0900_USBMessage.USBID= reader.ReadByte(); jT808_JTActiveSafety_0X0900_USBMessage.MessageLength = reader.ReadByte(); jT808_JTActiveSafety_0X0900_USBMessage.MessageContent = reader.ReadArray(jT808_JTActiveSafety_0X0900_USBMessage.MessageLength).ToArray(); jT808_JTActiveSafety_0X0900.USBMessages.Add(jT808_JTActiveSafety_0X0900_USBMessage); } } return jT808_JTActiveSafety_0X0900; } public void Serialize(ref JT808MessagePackWriter writer, JT808_JTActiveSafety_0x0900 value, IJT808Config config) { if(value.USBMessages!=null && value.USBMessages.Count>0) { writer.WriteByte((byte)value.USBMessages.Count); foreach(var item in value.USBMessages) { writer.WriteByte(item.USBID); if(item.MessageContent!=null&& item.MessageContent.Length > 0) { writer.WriteByte((byte)item.MessageContent.Length); writer.WriteArray(item.MessageContent); } else if (item.MessageContentObejct != null) { writer.Skip(1,out int MessageContentLengthPosition); object obj = config.GetMessagePackFormatterByType(item.MessageContentObejct.GetType()); JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, item.MessageContentObejct, config); writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - MessageContentLengthPosition - 1), MessageContentLengthPosition); } } } } } }