Package net.rubyeye.xmemcached.command.kestrel

Source Code of net.rubyeye.xmemcached.command.kestrel.KestrelGetCommand

/**
*Copyright [2009-2010] [dennis zhuang(killme2008@gmail.com)]
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
*             http://www.apache.org/licenses/LICENSE-2.0
*Unless required by applicable law or agreed to in writing,
*software distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
*either express or implied. See the License for the specific language governing permissions and limitations under the License
*/
/**
*Copyright [2009-2010] [dennis zhuang(killme2008@gmail.com)]
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
*             http://www.apache.org/licenses/LICENSE-2.0
*Unless required by applicable law or agreed to in writing,
*software distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
*either express or implied. See the License for the specific language governing permissions and limitations under the License
*/
package net.rubyeye.xmemcached.command.kestrel;

import java.util.concurrent.CountDownLatch;

import net.rubyeye.xmemcached.command.CommandType;
import net.rubyeye.xmemcached.command.text.TextGetCommand;
import net.rubyeye.xmemcached.transcoders.CachedData;
import net.rubyeye.xmemcached.transcoders.Transcoder;
import net.rubyeye.xmemcached.transcoders.TranscoderUtils;
/**
* Kestrel get command
* @author dennis
*
*/
public class KestrelGetCommand extends TextGetCommand {

  public KestrelGetCommand(String key, byte[] keyBytes, CommandType cmdType,
      CountDownLatch latch, Transcoder<?> transcoder) {
    super(key, keyBytes, cmdType, latch);
    this.transcoder = transcoder;
  }

  public static final TranscoderUtils transcoderUtils = new TranscoderUtils(
      false);

  @Override
  public void dispatch() {
    if (this.returnValues.size() == 0) {
      if (!this.wasFirst) {
        decodeError();
      } else {
        this.countDownLatch();
      }
    } else {
      CachedData value = this.returnValues.values().iterator().next();
      // If disable save primitive type as string,the response data have
      // 4-bytes flag aheader.
      if (!this.transcoder.isPrimitiveAsString()) {
        byte[] data = value.getData();
        if (data.length >= 4) {
          byte[] flagBytes = new byte[4];
          System.arraycopy(data, 0, flagBytes, 0, 4);
          byte[] realData = new byte[data.length - 4];
          System.arraycopy(data, 4, realData, 0, data.length - 4);
          int flag = transcoderUtils.decodeInt(flagBytes);
          value.setFlag(flag);
          value.setData(realData);
          value.setCapacity(realData.length);
        }
      }
      setResult(value);
      this.countDownLatch();
    }
  }

}
TOP

Related Classes of net.rubyeye.xmemcached.command.kestrel.KestrelGetCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.