| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 
							- using System.Collections.Generic;
 
- using System.Linq;
 
- namespace InABox.DigitalMatter
 
- {
 
-     public class DMRecord : DMObject
 
-     {
 
-         private List<DMField> _fields = new();
 
-         public ushort Length { get; set; }
 
-         public uint Sequence { get; set; }
 
-         public uint TimeStamp { get; set; }
 
-         public byte LogReason { get; set; }
 
-         public DMField[] Fields
 
-         {
 
-             get => _fields.ToArray();
 
-             set => _fields = value.ToList();
 
-         }
 
-         protected override void DoDecode()
 
-         {
 
-             //Logger.Send(LogType.Information, Thread.CurrentThread.ManagedThreadId.ToString(), String.Format("- Length: Size is [{0}]",BufferSize));
 
-             Length = TakeUInt16();
 
-             //Logger.Send(LogType.Information, Thread.CurrentThread.ManagedThreadId.ToString(), String.Format("- Sequence: Size is [{0}]", BufferSize));
 
-             Sequence = TakeUInt32();
 
-             //Logger.Send(LogType.Information, Thread.CurrentThread.ManagedThreadId.ToString(), String.Format("- TimeStamp: Size is [{0}]", BufferSize));
 
-             TimeStamp = TakeUInt32();
 
-             //Logger.Send(LogType.Information, Thread.CurrentThread.ManagedThreadId.ToString(), String.Format("- LogReason: Size is [{0}]", BufferSize));
 
-             LogReason = TakeByte();
 
-             ushort bytestaken = 0;
 
-             _fields.Clear();
 
-             while (bytestaken < Length && BufferSize > 0)
 
-             {
 
-                 var fieldid = PeekByte(0);
 
-                 var fieldsize = PeekByte(1) == 255 ? PeekUInt16(1) : PeekByte(1);
 
-                 //Logger.Send(LogType.Information, Thread.CurrentThread.ManagedThreadId.ToString(), String.Format("{0}: Field ID is [{1}] Size is [{2}]", _fields.Count, fieldid, fieldsize));
 
-                 var field = DMFactory.ParseField(Buffer);
 
-                 _fields.Add(field);
 
-                 var bytestotake = field.Length > 255 ? field.Length + 3 : field.Length + 2;
 
-                 TakeBytes(bytestotake);
 
-                 bytestaken += (ushort)bytestotake;
 
-             }
 
-             //Logger.Send(LogType.Information, Thread.CurrentThread.ManagedThreadId.ToString(), String.Format("- Done!: Size is [{0}]", BufferSize));
 
-         }
 
-         protected override void DoEncode()
 
-         {
 
-             AddUInt32(Sequence);
 
-             AddUInt32(TimeStamp);
 
-             AddByte(LogReason);
 
-             foreach (var field in _fields)
 
-                 AddBytes(field.Encode());
 
-             InsertUInt16(0, BufferSize);
 
-         }
 
-         public string Dump()
 
-         {
 
-             return $"[{string.Join(',', _fields.Select(x => x.Dump()))}]";
 
-         }
 
-     }
 
- }
 
 
  |