package com.aionemu.packetsamurai.parser.datatree;
import java.io.DataOutput;
import java.io.IOException;
import java.nio.ByteBuffer;
import com.aionemu.packetsamurai.parser.DataStructure.DataPacketMode;
import com.aionemu.packetsamurai.parser.formattree.Part;
import com.aionemu.packetsamurai.parser.parttypes.IntPartType.intType;
/**
*
* @author Gilles Duboscq
*
*/
public class IntValuePart extends ValuePart
{
private int _int;
intType _type;
public IntValuePart(DataTreeNodeContainer parent, Part part, intType type)
{
super(parent, part);
_type = type;
}
@Override
public void parse(ByteBuffer buf)
{
if(this.getMode() == DataPacketMode.FORGING)
throw new IllegalStateException("Can not parse on a Forging mode Data Packet Tree element");
int pos = buf.position();
int size = 0;
switch(_type)
{
case c:
_int = buf.get();
size = 1;
break;
case h:
_int = buf.getShort();
size = 2;
break;
case d:
_int = buf.getInt();
size = 4;
break;
}
// sets the raw bytes
_bytes = new byte[size];
buf.position(pos);
buf.get(_bytes);
}
@Override
public void forge(DataOutput stream) throws IOException
{
if(this.getMode() == DataPacketMode.PARSING)
throw new IllegalStateException("Can not call forge on a Parsing mode Data Packet Tree element");
switch(_type)
{
case c:
stream.write((byte) _int);
break;
case h:
stream.writeChar((char) _int);
break;
case d:
stream.writeInt(_int);
break;
}
}
public int getIntValue()
{
return _int;
}
public void setIntValue(int i)
{
if(this.getMode() == DataPacketMode.PARSING)
throw new IllegalStateException("Can not set value on a Parsing mode Data Packet Tree element");
_int = i;
}
@Override
public String getValueAsString()
{
return String.valueOf(this.getIntValue());
}
}