final long start = nanoTime();
try {
final SettableFuture<Object> future = SettableFuture.create();
TChannelBufferOutputTransport outTransport = new TChannelBufferOutputTransport();
TProtocol outProtocol = protocolFactory.getOutputProtocolFactory().getProtocol(outTransport);
writeArguments(outProtocol, sequenceId, args);
// send message and setup listener to handle the response
channel.sendAsynchronousRequest(outTransport.getOutputBuffer(), false, new NiftyClientChannel.Listener() {
@Override
public void onRequestSent() {}
@Override
public void onResponseReceived(ChannelBuffer message) {