using System;
using InABox.Clients;
using InABox.Core;

namespace InABox.Rpc
{
    public interface IRpcClientTransport : IRpcTransport
    {

        bool Ping();
        DatabaseInfo Info();
        
        void Connect();

        void Send(RpcMessage message);
        
        TResult Send<TCommand, TParameters, TResult>(TParameters parameters) 
            where TCommand : IRpcCommand<TParameters,TResult> 
            where TParameters : IRpcCommandParameters, ISerializeBinary
            where TResult : IRpcCommandResult, ISerializeBinary, new();
        
        void Disconnect();
        
        event RpcTransportMessageEvent OnMessage;

        bool IsConnected();
        bool IsSecure();

    }
}