1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- using System;
- using System.Collections.Generic;
- namespace InABox.DigitalMatter
- {
- public interface IDMObject
- {
- void Decode(byte[] data);
- byte[] EncodeArray();
- }
- public abstract class DMObject : IDMObject
- {
- public void Decode(IDMReadBuffer readBuffer)
- {
- BeforeDecode(readBuffer);
- DoDecode(readBuffer);
- AfterDecode(readBuffer);
- }
- public void Decode(List<byte> data) => Decode(new DMListReadBuffer(data));
- public void Decode(byte[] data) => Decode(new DMArrayReadBuffer(data));
- public byte[] EncodeArray() => EncodeList().ToArray();
- public void Encode(IDMWriteBuffer buffer)
- {
- BeforeEncode(buffer);
- DoEncode(buffer);
- AfterEncode(buffer);
- }
- public List<byte> EncodeList()
- {
- var buffer = new DMListWriteBuffer(new List<byte>());
- Encode(buffer);
- return buffer.Buffer;
- }
- protected uint SecondsSince2013UTC()
- {
- var epoch = new DateTime(2013, 1, 1);
- var utc = DateTime.Now.ToUniversalTime();
- var elapsed = utc - epoch;
- return (uint)elapsed.TotalSeconds;
- }
- public DateTime TimeStampToDateTime(uint timestamp)
- {
- return new DateTime(2013, 1, 1).AddSeconds(timestamp).ToLocalTime();
- }
- protected virtual void BeforeEncode(IDMWriteBuffer buffer)
- {
- }
- protected abstract void DoEncode(IDMWriteBuffer buffer);
- protected virtual void AfterEncode(IDMWriteBuffer buffer)
- {
- }
- protected virtual void BeforeDecode(IDMReadBuffer buffer)
- {
- }
- protected abstract void DoDecode(IDMReadBuffer buffer);
- protected virtual void AfterDecode(IDMReadBuffer buffer)
- {
- }
- }
- }
|