using System; using System.Collections; using System.Collections.Generic; using System.IO; namespace BITKit { public interface INetMessage { } public interface INetMessageReader { void Initialize(); Type GetMessageType(); object ReadBinaryAsObject(BinaryReader reader); void WriteBinaryAsObject(BinaryWriter writer, Object value); } public interface INetMessageReader : INetMessageReader { T ReadBinary(BinaryReader reader); void WriteBinary(BinaryWriter writer, T value); } public abstract class NetMessageReader : INetMessageReader { public Type GetMessageType() => typeof(T); public virtual void Initialize() { } public abstract T ReadBinary(BinaryReader reader); public object ReadBinaryAsObject(BinaryReader reader) => ReadBinary(reader); public abstract void WriteBinary(BinaryWriter writer, T value); public void WriteBinaryAsObject(BinaryWriter writer, object value) => WriteBinary(writer, (T)value); } public interface INetMessager : IDiagnostics { void Init(); void Send(T message); void Register(Action action); void UnRegister(Action action); } }