namespace InABox.IPC
{
    
    public interface IRPCServerTransport : IRPCTransport
    {
        void AddHandler<TSender, TCommand, TProperties, TResult>(RPCCommandHandler<TSender,TProperties,TResult> handler) 
            where TCommand : IRPCCommand<TProperties, TResult> 
            where TSender : class;

        void Start();

        void Stop();

        event RPCTransportMessageEvent BeforeMessage;
        
        event RPCTransportMessageEvent AfterMessage;
        
    }
}