DMDataRequest.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. namespace InABox.DigitalMatter
  5. {
  6. public class DMDataRequest : DMMessage
  7. {
  8. public List<DMRecord> _records = new();
  9. public override byte Type => 0x04;
  10. public DMRecord[] Records
  11. {
  12. get => _records.ToArray();
  13. set => _records = value.ToList();
  14. }
  15. protected override void DoDecode(IDMReadBuffer buffer)
  16. {
  17. _records.Clear();
  18. ushort bytestaken = 0;
  19. while (bytestaken < CheckSum)
  20. {
  21. var length = buffer.PeekUInt16(0);
  22. var record = new DMRecord();
  23. record.Decode(new DMPartialReadBuffer(buffer, 0, length));
  24. bytestaken += length;
  25. _records.Add(record);
  26. }
  27. }
  28. protected override void DoEncode(IDMWriteBuffer buffer)
  29. {
  30. foreach (var record in _records)
  31. record.Encode(buffer);
  32. buffer.InsertUInt16(0, buffer.BufferSize);
  33. }
  34. public override byte[] Dump()
  35. {
  36. return Encoding.UTF8.GetBytes($"(DataRequest):\n- {string.Join("\n- ", Records.Select(x => x.Dump()))}");
  37. }
  38. }
  39. }