package test.r2.perf.client;
import com.linkedin.common.callback.Callback;
import com.linkedin.r2.message.stream.StreamRequest;
import com.linkedin.r2.message.stream.StreamResponse;
import com.linkedin.r2.transport.common.Client;
import test.r2.perf.Generator;
import test.r2.perf.PerfStreamReader;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
/**
* @auther Zhenkai Zhu
*/
public class StreamClientRunnable extends AbstractClientRunnable<StreamRequest, StreamResponse>
{
private final Client _client;
public StreamClientRunnable(Client client,
AtomicReference<Stats> stats,
CountDownLatch startLatch,
Generator<StreamRequest> reqGen)
{
super(stats, startLatch, reqGen);
_client = client;
}
@Override
protected void sendMessage(StreamRequest nextMsg, final Callback<StreamResponse> timingCallback)
{
Callback<StreamResponse> callback = new Callback<StreamResponse>()
{
@Override
public void onError(Throwable e)
{
timingCallback.onError(e);
}
@Override
public void onSuccess(StreamResponse result)
{
result.getEntityStream().setReader(new PerfStreamReader<StreamResponse>(timingCallback, result));
}
};
_client.streamRequest(nextMsg, callback);
}
}