package com.meidusa.amoeba.memcached.packet;
import java.io.UnsupportedEncodingException;
import com.meidusa.amoeba.memcached.MemcachedConstant;
import com.meidusa.amoeba.net.packet.AbstractPacketBuffer;
public class AbstractMemcachedPacket extends com.meidusa.amoeba.net.packet.AbstractPacket implements MemcachedConstant {
/**
* Magic number
*/
public byte magic;
/**
* Command code
*/
public byte opCode;
/**
* Length in bytes of the text key that follows the command extras.
*/
public short keyLength;
/**
* Length in bytes of the command extras.
*/
public byte extrasLength;
/**
* Reserved for future use (Sean is using this soon).
*/
public byte dateType;
/**
* Really reserved for future use (up for grabs).
*/
public short status; //Request header was Reserved
/**
* Length in bytes of extra + key + value.
*/
public int totalBodyLength;
/**
* Will be copied back to you in the response
*/
public int opaque;
/**
* Data version check.
*/
public int cas;
@Override
protected void afterPacketWritten(AbstractPacketBuffer buffer) {
/*int position = buffer.getPosition();
buffer.setPosition(position)
buffer.setPosition(position);*/
}
@Override
protected int calculatePacketSize() {
return 24;
}
@Override
protected Class<? extends AbstractPacketBuffer> getPacketBufferClass() {
return AbstractMemcachedPacketBuffer.class;
}
@Override
protected void init(AbstractPacketBuffer buffer) {
AbstractMemcachedPacketBuffer bufferTemp = (AbstractMemcachedPacketBuffer)buffer;
magic = bufferTemp.readByte();
opCode = bufferTemp.readByte();
keyLength = bufferTemp.readShort();
extrasLength = bufferTemp.readByte();
dateType = bufferTemp.readByte();
status = bufferTemp.readShort();
totalBodyLength = bufferTemp.readInt();
opaque = bufferTemp.readInt();
cas = bufferTemp.readInt();
}
@Override
protected void write2Buffer(AbstractPacketBuffer buffer)
throws UnsupportedEncodingException {
AbstractMemcachedPacketBuffer bufferTemp = (AbstractMemcachedPacketBuffer)buffer;
bufferTemp.writeByte(magic);
bufferTemp.writeByte(opCode);
bufferTemp.writeShort(keyLength);
bufferTemp.writeByte(extrasLength);
bufferTemp.writeByte(dateType);
bufferTemp.writeShort(status);
bufferTemp.writeInt(totalBodyLength);
bufferTemp.writeInt(opaque);
bufferTemp.writeInt(cas);
}
}