package io.teknek.nibiru.client;
import io.teknek.nibiru.transport.Response;
import io.teknek.nibiru.transport.keyvalue.Set;
import io.teknek.nibiru.transport.rpc.BlockingRpc;
import io.teknek.nibiru.transport.rpc.BlockingRpcResponse;
import io.teknek.nit.NitDesc;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.codehaus.jackson.type.TypeReference;
public class RpcClient extends Client{
public RpcClient(String host, int port, int connectionTimeoutMillis, int socketTimeoutMillis) {
super(host, port, connectionTimeoutMillis, socketTimeoutMillis);
}
public <T> BlockingRpcResponse<T> blockingRpc(NitDesc desc, long duration, TimeUnit unit, TypeReference resultClass) throws ClientException {
BlockingRpc m = new BlockingRpc();
m.setNitDesc(desc);
m.setTimeoutInMillis(unit.toMillis(duration));
try {
BlockingRpcResponse<T> response = (BlockingRpcResponse<T>) post(m, resultClass);
if (response.getException() != null){
throw new RuntimeException(response.getException());
}
return response;
} catch (IOException | RuntimeException e) {
throw new ClientException(e);
}
}
}