DMField.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System;
  2. namespace InABox.DigitalMatter
  3. {
  4. public abstract class DMField : DMObject
  5. {
  6. private int _payloadaddress;
  7. public abstract byte Type { get; }
  8. public ushort Length { get; set; }
  9. protected override void BeforeEncode(IDMWriteBuffer buffer)
  10. {
  11. base.BeforeEncode(buffer);
  12. _payloadaddress = buffer.AddByte(Type);
  13. }
  14. protected override void AfterEncode(IDMWriteBuffer buffer)
  15. {
  16. base.AfterEncode(buffer);
  17. Length = buffer.BufferSize;
  18. buffer.InsertUInt16(_payloadaddress, Length);
  19. }
  20. protected override void BeforeDecode(IDMReadBuffer buffer)
  21. {
  22. base.BeforeDecode(buffer);
  23. int type = buffer.TakeByte();
  24. Length = buffer.PeekByte(0) == 255 ? buffer.TakeUInt16() : buffer.TakeByte();
  25. }
  26. public abstract bool IsValid();
  27. public virtual string Dump()
  28. {
  29. return BitConverter.ToString(new[] { Type });
  30. }
  31. }
  32. }