package net.rubyeye.xmemcached.command.kestrel; import java.nio.ByteBuffer; import java.util.concurrent.CountDownLatch; import net.rubyeye.xmemcached.command.text.TextDeleteCommand; import net.rubyeye.xmemcached.impl.MemcachedTCPSession; import net.rubyeye.xmemcached.utils.ByteUtils; public class KestrelDeleteCommand extends TextDeleteCommand { public KestrelDeleteCommand(String key, byte[] keyBytes, int time, CountDownLatch latch, boolean noreply) { super(key, keyBytes, time, latch, noreply); } @Override public boolean decode(MemcachedTCPSession session, ByteBuffer buffer) { if (buffer == null || !buffer.hasRemaining()) { return false; } if (this.result == null) { if (buffer.remaining() < 2) { return false; } byte first = buffer.get(buffer.position()); byte second = buffer.get(buffer.position() + 1); if (first == 'E' && second == 'N') { this.setResult(Boolean.TRUE); this.countDownLatch(); // END\r\n return ByteUtils.stepBuffer(buffer, 5); } else if (first == 'D' && second == 'E') { this.setResult(Boolean.TRUE); this.countDownLatch(); // DELETED\r\n return ByteUtils.stepBuffer(buffer, 9); } else { return this.decodeError(session, buffer); } } else { Boolean result = (Boolean) this.result; if (result) { // END\r\n return ByteUtils.stepBuffer(buffer, 5); } else { return this.decodeError(session, buffer); } } } }