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

com.taobao.tair.packet.TairPacketStreamer Maven / Gradle / Ivy

/**
 * (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.nio.ByteBuffer;

import com.taobao.tair.comm.Transcoder;
import com.taobao.tair.etc.TairConstant;
import com.taobao.tair.extend.packet.LeftOrRight;
import com.taobao.tair.extend.packet.common.response.ResponseExpirePacket;
import com.taobao.tair.extend.packet.common.response.ResponseTTLPacket;
import com.taobao.tair.extend.packet.common.response.ResponseTypePacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHDelPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHGetPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHGetallPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHIncrbyPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHLenPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHMgetPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHMsetPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHSetPacket;
import com.taobao.tair.extend.packet.hset.response.ResponseHValsPacket;
import com.taobao.tair.extend.packet.list.response.ResponseLIndexPacket;
import com.taobao.tair.extend.packet.list.response.ResponseLLenPacket;
import com.taobao.tair.extend.packet.list.response.ResponseLRPopPacket;
import com.taobao.tair.extend.packet.list.response.ResponseLRPushPacket;
import com.taobao.tair.extend.packet.list.response.ResponseLRangePacket;
import com.taobao.tair.extend.packet.list.response.ResponseLRemPacket;
import com.taobao.tair.extend.packet.list.response.ResponseLTrimPacket;

import com.taobao.tair.extend.packet.set.response.ResponseSAddPacket;
import com.taobao.tair.extend.packet.set.response.ResponseSCardPacket;
import com.taobao.tair.extend.packet.set.response.ResponseSMembersPacket;
import com.taobao.tair.extend.packet.set.response.ResponseSPopPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZAddPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZCardPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZCountPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZIncrbyPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRangePacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRangebyscorePacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRankPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRemPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRemrangebyrankPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRemrangebyscorePacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRevrangePacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZRevrankPacket;
import com.taobao.tair.extend.packet.zet.response.ResponseZScorePacket;

public class TairPacketStreamer implements PacketStreamer {
	private Transcoder transcoder = null;

	public TairPacketStreamer(Transcoder transcoder) {
		this.transcoder = transcoder;
	}

	public BasePacket decodePacket(int pcode, byte[] data) {
		BasePacket packet = createPacket(pcode);

		if (packet != null) {
			packet.setLen(data.length);
			packet.setByteBuffer(ByteBuffer.wrap(data));
		}
		return packet;
	}

	private BasePacket createPacket(int pcode) {
		BasePacket packet = null;

		switch (pcode) {
		case TairConstant.TAIR_RESP_RETURN_PACKET:
			packet = new ReturnPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_GET_PACKET:
			packet = new ResponseGetPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_INCDEC_PACKET:
			packet = new ResponseIncDecPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_GET_GROUP_NEW_PACKET:
			packet = new ResponseGetGroupPacket(null);
			break;
		case TairConstant.TAIR_RESP_GETITEMS_PACKET:
			packet = new ResponseGetItemsPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_QUERY_INFO_PACKET:
			packet = new ResponseQueryInfoPacket(transcoder);
			break;
		///////////////////////////////COMMON///////////////////////////
		case TairConstant.TAIR_RESP_TTL_PACKET:
			packet = new ResponseTTLPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_TYPE_PACKET:
			packet = new ResponseTypePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_EXPIRE_PACKET:
			packet = new ResponseExpirePacket(transcoder);
			break;
		///////////////////////////////LIST/////////////////////////////
		case TairConstant.TAIR_RESP_LPOP_PACKET:
			packet = new ResponseLRPopPacket(transcoder, LeftOrRight.IS_L);
			break;
		case TairConstant.TAIR_RESP_LPUSH_PACKET:
			packet = new ResponseLRPushPacket(transcoder, LeftOrRight.IS_L);
			break;
		case TairConstant.TAIR_RESP_RPOP_PACKET:
			packet = new ResponseLRPopPacket(transcoder, LeftOrRight.IS_R);
			break;
		case TairConstant.TAIR_RESP_RPUSH_PACKET:
			packet = new ResponseLRPushPacket(transcoder, LeftOrRight.IS_R);
			break;
		case TairConstant.TAIR_RESP_LINDEX_PACKET:
			packet = new ResponseLIndexPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_LLEN_PACKET:
			packet = new ResponseLLenPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_LRANGE_PACKET:
			packet = new ResponseLRangePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_LREM_PACKET:
			packet = new ResponseLRemPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_LTRIM_PACKET:
			packet = new ResponseLTrimPacket(transcoder);
			break;
		// ///////////////////HSET/////////////////////////////////////
		case TairConstant.TAIR_RESP_HDEL_PACKET:
			packet = new ResponseHDelPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HGETALL_PACKET:
			packet = new ResponseHGetallPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HGET_PACKET:
			packet = new ResponseHGetPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HINCRBY_PACKET:
			packet = new ResponseHIncrbyPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HMGET_PACKET:
			packet = new ResponseHMgetPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HMSET_PACKET:
			packet = new ResponseHMsetPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HSET_PACKET:
			packet = new ResponseHSetPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HVALS_PACKET:
			packet = new ResponseHValsPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_HLEN_PACKET:
			packet = new ResponseHLenPacket(transcoder);
			break;
		// /////////////////////SET///////////////////////////////////
		case TairConstant.TAIR_RESP_SADD_PACKET:
			packet = new ResponseSAddPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_SCARD_PACKET:
			packet = new ResponseSCardPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_SMEMBERS_PACKET:
			packet = new ResponseSMembersPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_SPOP_PACKET:
			packet = new ResponseSPopPacket(transcoder);
			break;
		// //////////////////ZSET////////////////////////////////////
		case TairConstant.TAIR_RESP_ZADD_PACKET:
			packet = new ResponseZAddPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZCARD_PACKET:
			packet = new ResponseZCardPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZRANGEBYSCORE_PACKET:
			packet = new ResponseZRangebyscorePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZRANGE_PACKET:
			packet = new ResponseZRangePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZREVRANGE_PACKET:
			packet = new ResponseZRevrangePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZRANK_PACKET:
			packet = new ResponseZRankPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZSCORE_PACKET:
			packet = new ResponseZScorePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZREM_PACKET:
			packet = new ResponseZRemPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZREMRANGEBYRANK_PACKET:
			packet = new ResponseZRemrangebyrankPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZREMRANGEBYSCORE_PACKET:
			packet = new ResponseZRemrangebyscorePacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZREVRANK_PACKET:
			packet = new ResponseZRevrankPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZCOUNT_PACKET:
			packet = new ResponseZCountPacket(transcoder);
			break;
		case TairConstant.TAIR_RESP_ZINCRBY_PACKET:
			packet = new ResponseZIncrbyPacket(transcoder);
			break;
		default:
			throw new IllegalArgumentException("unkonw return packet, pcode: "
					+ pcode);
		}

		if ((packet != null) && (packet.getPcode() != pcode)) {
			packet = null;
		}

		return packet;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy