DMObject.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. namespace InABox.DigitalMatter
  3. {
  4. public interface IDMObject
  5. {
  6. void Decode(byte[] data);
  7. byte[] Encode();
  8. }
  9. public abstract class DMObject : DMBuffer, IDMObject
  10. {
  11. public void Decode(byte[] data)
  12. {
  13. Buffer = data;
  14. BeforeDecode();
  15. DoDecode();
  16. AfterDecode();
  17. }
  18. public byte[] Encode()
  19. {
  20. Reset();
  21. BeforeEncode();
  22. DoEncode();
  23. AfterEncode();
  24. return Buffer;
  25. }
  26. protected uint SecondsSince2013UTC()
  27. {
  28. var epoch = new DateTime(2013, 1, 1);
  29. var utc = DateTime.Now.ToUniversalTime();
  30. var elapsed = utc - epoch;
  31. return (uint)elapsed.TotalSeconds;
  32. }
  33. public DateTime TimeStampToDateTime(uint timestamp)
  34. {
  35. return new DateTime(2013, 1, 1).AddSeconds(timestamp).ToLocalTime();
  36. }
  37. protected virtual void BeforeEncode()
  38. {
  39. }
  40. protected abstract void DoEncode();
  41. protected virtual void AfterEncode()
  42. {
  43. }
  44. protected virtual void BeforeDecode()
  45. {
  46. }
  47. protected abstract void DoDecode();
  48. protected virtual void AfterDecode()
  49. {
  50. }
  51. }
  52. }