package test.r2.integ; import com.linkedin.common.callback.Callback; import com.linkedin.common.util.None; import com.linkedin.data.ByteString; import com.linkedin.r2.message.stream.entitystream.ReadHandle; import com.linkedin.r2.message.stream.entitystream.Reader; /** * @author Zhenkai Zhu */ class BytesReader implements Reader { private final byte _b; private final Callback<None> _callback; private int _length; private boolean _bytesCorrect; private ReadHandle _rh; BytesReader(byte b, Callback<None> callback) { _b = b; _callback = callback; _bytesCorrect = true; _length = 0; } @Override public void onInit(ReadHandle rh) { _rh = rh; _rh.request(3); } @Override public void onDataAvailable(ByteString data) { _length += data.length(); byte [] bytes = data.copyBytes(); for (byte b : bytes) { if (b != _b) { _bytesCorrect = false; } } requestMore(_rh); } @Override public void onDone() { _callback.onSuccess(None.none()); } @Override public void onError(Throwable e) { _callback.onError(e); } public int getTotalBytes() { return _length; } public boolean allBytesCorrect() { return _bytesCorrect; } protected void requestMore(ReadHandle rh) { rh.request(1); } }