| 123456789101112131415161718192021222324252627282930313233343536373839 | using System;namespace InABox.DigitalMatter{    public abstract class DMField : DMObject    {        private int _payloadaddress;        public abstract byte Type { get; }        public ushort Length { get; set; }        protected override void BeforeEncode(IDMWriteBuffer buffer)        {            base.BeforeEncode(buffer);            _payloadaddress = buffer.AddByte(Type);        }        protected override void AfterEncode(IDMWriteBuffer buffer)        {            base.AfterEncode(buffer);            Length = buffer.BufferSize;            buffer.InsertUInt16(_payloadaddress, Length);        }        protected override void BeforeDecode(IDMReadBuffer buffer)        {            base.BeforeDecode(buffer);            int type = buffer.TakeByte();            Length = buffer.PeekByte(0) == 255 ? buffer.TakeUInt16() : buffer.TakeByte();        }        public abstract bool IsValid();        public virtual string Dump()        {            return BitConverter.ToString(new[] { Type });        }    }}
 |