All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.spy.memcached.protocol.binary.GetOperationImpl Maven / Gradle / Ivy

The newest version!
package net.spy.memcached.protocol.binary;

import java.util.Collection;
import java.util.Collections;

import net.spy.memcached.ops.GetOperation;
import net.spy.memcached.ops.GetsOperation;
import net.spy.memcached.ops.OperationStatus;

class GetOperationImpl extends OperationImpl
	implements GetOperation, GetsOperation {

	static final int CMD=0;

	/**
	 * Length of the extra header stuff for a GET response.
	 */
	static final int EXTRA_HDR_LEN=4;

	private final String key;

	public GetOperationImpl(String k, GetOperation.Callback cb) {
		super(CMD, generateOpaque(), cb);
		key=k;
	}

	public GetOperationImpl(String k, GetsOperation.Callback cb) {
		super(CMD, generateOpaque(), cb);
		key=k;
	}

	@Override
	public void initialize() {
		prepareBuffer(key, 0, EMPTY_BYTES);
	}

	@Override
	protected void decodePayload(byte[] pl) {
		final int flags=decodeInt(pl, 0);
		final byte[] data=new byte[pl.length - EXTRA_HDR_LEN];
		System.arraycopy(pl, EXTRA_HDR_LEN, data, 0, pl.length-EXTRA_HDR_LEN);
		// Assume we're processing a get unless the cast fails.
		try {
			GetOperation.Callback cb=(GetOperation.Callback)getCallback();
			cb.gotData(key, flags, data);
		} catch(ClassCastException e) {
			GetsOperation.Callback cb=(GetsOperation.Callback)getCallback();
			cb.gotData(key, flags, responseCas, data);
		}
		getCallback().receivedStatus(STATUS_OK);
	}

	@Override
	protected OperationStatus getStatusForErrorCode(int errCode, byte[] errPl) {
		return errCode == ERR_NOT_FOUND ? NOT_FOUND_STATUS : null;
	}

	public Collection getKeys() {
		return Collections.singleton(key);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy