if (item == null) {
return false;
} else {
this.currentReturnKey = item;
this.returnValues.put(this.currentReturnKey,
new CachedData());
this.parseStatus = ParseStatus.FLAG;
continue;
}
case FLAG:
item = getItem(buffer, ' ');
if (item == null) {
return false;
} else {
final CachedData cachedData = this.returnValues
.get(this.currentReturnKey);
cachedData.setFlag(Integer.parseInt(item));
this.parseStatus = ParseStatus.DATA_LEN;
continue;
}
case DATA_LEN:
item = getItem(buffer, '\r', ' ');
if (item == null) {
return false;
} else {
final CachedData cachedData = this.returnValues
.get(this.currentReturnKey);
cachedData.setCapacity(Integer.parseInt(item));
assert (cachedData.getCapacity() >= 0);
cachedData.setData(new byte[cachedData.getCapacity()]);
this.parseStatus = ParseStatus.DATA_LEN_DONE;
continue;
}
case DATA_LEN_DONE:
if (buffer.remaining() < 1) {
return false;
} else {
first = buffer.get(buffer.position());
// check if buffer has cas value
if (first == '\n') {
// skip '\n'
buffer.position(buffer.position() + 1);
this.parseStatus = ParseStatus.DATA;
continue;
} else {
this.parseStatus = ParseStatus.CAS;
continue;
}
}
case CAS:
// has cas value
item = getItem(buffer, '\r');
if (item == null) {
return false;
} else {
final CachedData cachedData = this.returnValues
.get(this.currentReturnKey);
cachedData.setCas(Long.parseLong(item));
this.parseStatus = ParseStatus.CAS_DONE;
continue;
}
case CAS_DONE:
if (buffer.remaining() < 1) {
return false;
} else {
this.parseStatus = ParseStatus.DATA;
// skip '\n'
buffer.position(buffer.position() + 1);
continue;
}
case DATA:
final CachedData value = this.returnValues
.get(this.currentReturnKey);
int remaining = buffer.remaining();
int remainingCapacity = value.remainingCapacity();
assert (remainingCapacity >= 0);
// Data is not enough,return false
if (remaining < remainingCapacity + 2) {
int length = remaining > remainingCapacity ? remainingCapacity
: remaining;
value.fillData(buffer, length);
return false;
} else if (remainingCapacity > 0) {
value.fillData(buffer, remainingCapacity);
}
assert (value.remainingCapacity() == 0);
buffer
.position(buffer.position()
+ ByteUtils.SPLIT.remaining());
Map<Object, Command> mergetCommands = getMergeCommands();