public ByteBuffer parserBuffer(CommandEnum commandEnum, CommandPrototype prototype) {
		if (commandEnum == CommandEnum.Version) {
			magic = BinaryProtocolConst.Magic.REQUEST_MAIGIC;
			opcode = BinaryProtocolConst.Opcodes.VERSION;
			keyLength = BinaryProtocolConst.EMPTY_SHORT;
			extrasLength = BinaryProtocolConst.EMPTY_BYTE;
			dataType = BinaryProtocolConst.DataTypes.RAW_BYES;
			reserved = BinaryProtocolConst.EMPTY_SHORT;
			totalBodyLength = BinaryProtocolConst.EMPTY_INT;
			opaque = BinaryProtocolConst.EMPTY_INT;
			cas = BinaryProtocolConst.EMPTY_LONG;

		} else if (commandEnum == CommandEnum.Add) {

			CommandData data = serilizer.encode(prototype.getValue());

			magic = BinaryProtocolConst.Magic.REQUEST_MAIGIC;
			opcode = BinaryProtocolConst.Opcodes.ADD;
			keyLength = (short) prototype.getKey().length();
			extrasLength = (byte) 0x08;
			dataType = BinaryProtocolConst.DataTypes.RAW_BYES;
			reserved = BinaryProtocolConst.EMPTY_SHORT;
			totalBodyLength = keyLength + extrasLength + data.getValueData().length;
			opaque = BinaryProtocolConst.EMPTY_INT;
			cas = BinaryProtocolConst.EMPTY_LONG;
			flags = data.getFlag();
			expiry = prototype.getExpiry();

			key = prototype.getKeyBytes(DEFAULT_CHARSET_NAME);
			value = data.getValueData();

		} else if (commandEnum == CommandEnum.Get) {
			magic = BinaryProtocolConst.Magic.REQUEST_MAIGIC;
			opcode = BinaryProtocolConst.Opcodes.GET;
			keyLength = (short) prototype.getKey().length();
			extrasLength = BinaryProtocolConst.EMPTY_BYTE;
			dataType = BinaryProtocolConst.DataTypes.RAW_BYES;
			reserved = BinaryProtocolConst.EMPTY_SHORT;
			totalBodyLength = keyLength;
			opaque = BinaryProtocolConst.EMPTY_INT;
			cas = BinaryProtocolConst.EMPTY_LONG;

			key = prototype.getKeyBytes(DEFAULT_CHARSET_NAME);
		}

		return warpBuffer(commandEnum);
	}