Add OutPacket interface and ByteBuf implementation

Replacement for LittleEndianWriter, GenericLittleEndianWriter,
and MaplePacketLittleEndianWriter.
This commit is contained in:
P0nk
2021-06-20 20:40:23 +02:00
parent 00abbb4acd
commit f3faee2e16
5 changed files with 107 additions and 8 deletions

View File

@@ -1,11 +1,88 @@
package net.packet;
import io.netty.buffer.ByteBuf;
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(ByteBuf byteBuf) {
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 short getHeader() {
return byteBuf.getShortLE(0);
}
@Override
public byte[] getBytes() {
// TODO implement
throw new UnsupportedOperationException();
}
@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(short 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 writeBoolean(boolean value) {
byteBuf.writeByte(value ? 1 : 0);
}
@Override
public void writeString(String value) {
writeShort((short) value.length());
writeBytes(value.getBytes(STRING_CHARSET));
}
@Override
public void writePoint(Point value) {
writeShort((short) value.getX());
writeShort((short) value.getY());
}
@Override
public void skip(int bytesToSkip) {
writeBytes(new byte[bytesToSkip]);
}
}