/**
*
*/
package net.spy.memcached.protocol;
import net.spy.memcached.ops.GetOperation;
import net.spy.memcached.ops.OperationStatus;
/**
* Wrapper callback for use in optimized gets.
*/
public class GetCallbackWrapper implements GetOperation.Callback {
private static final OperationStatus END=
new OperationStatus(true, "END");
private boolean completed=false;
private int remainingKeys=0;
private GetOperation.Callback cb=null;
public GetCallbackWrapper(int k, GetOperation.Callback c) {
super();
remainingKeys=k;
cb=c;
}
public void gotData(String key, int flags, byte[] data) {
assert !completed : "Got data for a completed wrapped op";
cb.gotData(key, flags, data);
if(--remainingKeys == 0) {
// Fake a status line
receivedStatus(END);
}
}
public void receivedStatus(OperationStatus status) {
if(!completed) {
cb.receivedStatus(status);
}
}
public void complete() {
assert !completed;
cb.complete();
completed=true;
}
}