/** * (C) 2007-2010 Taobao Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */ package com.taobao.tair.packet; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import com.taobao.tair.DataEntry; import com.taobao.tair.comm.Transcoder; import com.taobao.tair.etc.TairConstant; public class RequestGetPacket extends BasePacket { protected short namespace; protected Set<Object> keyList = new HashSet<Object>(); public RequestGetPacket(Transcoder transcoder) { super(transcoder); this.pcode = TairConstant.TAIR_REQ_GET_PACKET; } /** * encode */ public int encode() { int capacity = 0; List<byte[]> list = new ArrayList<byte[]>(); for (Object key : keyList) { byte[] keyByte = transcoder.encode(key); if (keyByte.length >= TairConstant.TAIR_KEY_MAX_LENTH) { return 1; } list.add(keyByte); capacity += 40; capacity += keyByte.length; } writePacketBegin(capacity); // body byteBuffer.put((byte) 0); byteBuffer.putShort(namespace); byteBuffer.putInt(list.size()); // 7 for (byte[] keyByte : list) { fillMetas(); DataEntry.encodeMeta(byteBuffer); // 29 byteBuffer.putInt(keyByte.length);// 4 byteBuffer.put(keyByte); // 33+length } writePacketEnd(); return 0; } /** * decode */ public boolean decode() { throw new UnsupportedOperationException(); } public boolean addKey(Object key) { return this.keyList.add(key); } /** * * @return the keyList */ public Set<Object> getKeyList() { return keyList; } /** * * @param keyList * the keyList to set */ public void setKeyList(Set<Object> keyList) { this.keyList = keyList; } /** * * @return the namespace */ public short getNamespace() { return namespace; } /** * * @param namespace * the namespace to set */ public void setNamespace(short namespace) { this.namespace = namespace; } }