95 lines
2.1 KiB
Java
95 lines
2.1 KiB
Java
package net.packet;
|
|
|
|
import constants.string.CharsetConstants;
|
|
import io.netty.buffer.ByteBuf;
|
|
import io.netty.buffer.ByteBufUtil;
|
|
import io.netty.buffer.Unpooled;
|
|
import net.jcip.annotations.NotThreadSafe;
|
|
import net.opcodes.SendOpcode;
|
|
|
|
import java.awt.*;
|
|
|
|
@NotThreadSafe
|
|
public class ByteBufOutPacket implements OutPacket {
|
|
private final ByteBuf byteBuf;
|
|
|
|
public ByteBufOutPacket() {
|
|
this.byteBuf = Unpooled.buffer();
|
|
}
|
|
|
|
public ByteBufOutPacket(SendOpcode op) {
|
|
ByteBuf byteBuf = Unpooled.buffer();
|
|
byteBuf.writeShortLE((short) op.getValue());
|
|
this.byteBuf = byteBuf;
|
|
}
|
|
|
|
public ByteBufOutPacket(SendOpcode op, int initialCapacity) {
|
|
ByteBuf byteBuf = Unpooled.buffer(initialCapacity);
|
|
byteBuf.writeShortLE((short) op.getValue());
|
|
this.byteBuf = byteBuf;
|
|
}
|
|
|
|
@Override
|
|
public byte[] getBytes() {
|
|
return ByteBufUtil.getBytes(byteBuf);
|
|
}
|
|
|
|
@Override
|
|
public void writeByte(byte value) {
|
|
byteBuf.writeByte(value);
|
|
}
|
|
|
|
@Override
|
|
public void writeByte(int value) {
|
|
writeByte((byte) value);
|
|
}
|
|
|
|
@Override
|
|
public void writeBytes(byte[] value) {
|
|
byteBuf.writeBytes(value);
|
|
}
|
|
|
|
@Override
|
|
public void writeShort(int value) {
|
|
byteBuf.writeShortLE(value);
|
|
}
|
|
|
|
@Override
|
|
public void writeInt(int value) {
|
|
byteBuf.writeIntLE(value);
|
|
}
|
|
|
|
@Override
|
|
public void writeLong(long value) {
|
|
byteBuf.writeLongLE(value);
|
|
}
|
|
|
|
@Override
|
|
public void writeBool(boolean value) {
|
|
byteBuf.writeByte(value ? 1 : 0);
|
|
}
|
|
|
|
@Override
|
|
public void writeString(String value) {
|
|
byte[] bytes = value.getBytes(CharsetConstants.CHARSET);
|
|
writeShort(bytes.length);
|
|
writeBytes(bytes);
|
|
}
|
|
|
|
@Override
|
|
public void writeFixedString(String value) {
|
|
writeBytes(value.getBytes(CharsetConstants.CHARSET));
|
|
}
|
|
|
|
@Override
|
|
public void writePos(Point value) {
|
|
writeShort((short) value.getX());
|
|
writeShort((short) value.getY());
|
|
}
|
|
|
|
@Override
|
|
public void skip(int numberOfBytes) {
|
|
writeBytes(new byte[numberOfBytes]);
|
|
}
|
|
}
|