using System; using System.IO; namespace BITKit { 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); } }