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 });
- }
- }
- }
|