修正命名错误
xiyunfei authored at 2023-04-09 21:10:58
2.16 KiB
NewLife.JT808
using NewLife.Data;
using NewLife.JT808.Protocols;
using NewLife.JT808.Models;
using NewLife.JT808.Protocols;
using NewLife.Serialization;

namespace NewLife.JT808.Models
{
    /// <summary>定位数据批量上传</summary>
    [MessageKind(MessageKinds.定位数据批量上传)]
    public class T0704 : IAccessor
    {
        /// <summary>数据项个数</summary>
        public UInt16 Count { get; set; }

        /// <summary>位置数据类型。0:正常位置批量汇报,1:盲区补报</summary>
        public Byte Type { get; set; }

        /// <summary>位置汇报数据集合</summary>
        public List<T0200> Positions { get; set; }

        /// <summary>解析数据</summary>
        /// <param name="stream"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public Boolean Read(Stream stream, Object? context)
        {
            var reader = context as Binary ?? Helper.CreateReader(stream);

            Count = reader.ReadUInt16();
            Type = reader.ReadByte();
            Positions = new List<T0200>();
            for (var i = 0; i < Count; i++)
            {
                var len = reader.ReadUInt16();
                var buf = reader.ReadBytes(len);
                var ms = new MemoryStream(buf);

                var msg = new T0200();
                msg.Read(ms, null);
                Positions.Add(msg);
            }

            return true;
        }

        /// <summary>序列化消息</summary>
        /// <param name="stream"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public Boolean Write(Stream stream, Object? context)
        {
            var writer = context as Binary ?? Helper.CreateWriter(stream);

            Count = (UInt16)(Positions?.Count ?? 0);
            writer.Write(Count);
            writer.Write(Type);

            if (Count > 0)
            {
                foreach (var item in Positions)
                {
                    var pk = item.ToPacket();
                    writer.Write((UInt16)pk.Total);
                    writer.Write(pk.ToArray());
                }
            }

            return true;
        }
    }
}