package org.couchbase.mock.memcached;
import org.couchbase.mock.memcached.protocol.BinaryResponse;
import org.couchbase.mock.memcached.protocol.ErrorCode;
import org.couchbase.mock.memcached.protocol.BinaryCommand;
import org.couchbase.mock.memcached.protocol.BinaryStoreCommand;
import org.couchbase.mock.memcached.protocol.BinaryStoreResponse;
import org.couchbase.mock.memcached.protocol.CommandCode;
@Override
public void execute(BinaryCommand cmd, MemcachedServer server, MemcachedConnection client) {
BinaryStoreCommand command = (BinaryStoreCommand) cmd;
ErrorCode err = ErrorCode.SUCCESS;
Item item = command.getItem();
CommandCode cc = cmd.getComCode();
switch (cc) {
case ADD:
case ADDQ:
err = server.getDatastore().add(server, cmd.getVBucketId(), item);
break;
case REPLACE:
case REPLACEQ:
err = server.getDatastore().replace(server, cmd.getVBucketId(), item);
break;
case SET:
case SETQ:
err = server.getDatastore().set(server, cmd.getVBucketId(), item);
break;
default:
client.sendResponse(new BinaryResponse(cmd, ErrorCode.EINTERNAL));
return;
}
if (err == ErrorCode.SUCCESS && (cc == CommandCode.ADDQ || cc == CommandCode.SETQ || cc == CommandCode.REPLACEQ)) {
return;
}
client.sendResponse(new BinaryStoreResponse(command, err, item.getCas()));
}
}