using System; using InABox.Core; namespace InABox.IPC { public interface IRPCCommand { } public interface IRPCCommandHandler { String? Execute(object sender, String? parameters); } public abstract class RPCCommandHandler : IRPCCommandHandler where TSender : class { private TSender _sender; public RPCCommandHandler(TSender sender) { _sender = sender ?? throw new ArgumentNullException(nameof(sender)); } public abstract TResult? Execute(TSender sender, TParameters? parameters); public String? Execute(object sender, String? parameters) { var props = Serialization.Deserialize(parameters); var result = Execute(_sender, props); return Serialization.Serialize(result); } } }