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

@@ -11,10 +11,15 @@ public class ByteBufInPacket implements InPacket {
this.byteBuf = byteBuf;
}
@Override
public short getHeader() {
return byteBuf.getShortLE(0);
}
@Override
public byte[] getBytes() {
// TODO
return null;
// TODO implement
throw new UnsupportedOperationException();
}
@Override
@@ -51,15 +56,15 @@ public class ByteBufInPacket implements InPacket {
}
@Override
public byte[] read(int numberOfBytes) {
byte[] bytes = new byte[numberOfBytes];
public byte[] readBytes(int bytesToRead) {
byte[] bytes = new byte[bytesToRead];
byteBuf.readBytes(bytes);
return bytes;
}
@Override
public void skip(int numberOfBytes) {
byteBuf.skipBytes(numberOfBytes);
public void skip(int bytesToSkip) {
byteBuf.skipBytes(bytesToSkip);
}
@Override

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]);
}
}

View File

@@ -9,7 +9,7 @@ public interface InPacket extends Packet {
long readLong();
Point readPoint();
String readString();
byte[] read(int numberOfBytes);
byte[] readBytes(int bytesToRead);
void skip(int numberOfBytes);
int available();
void seek(int byteOffset);

View File

@@ -1,4 +1,20 @@
package net.packet;
import java.awt.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public interface OutPacket extends Packet {
Charset STRING_CHARSET = StandardCharsets.US_ASCII;
void writeByte(byte value);
void writeByte(int value);
void writeBytes(byte[] value);
void writeShort(short value);
void writeInt(int value);
void writeLong(long value);
void writeBoolean(boolean value);
void writeString(String value);
void writePoint(Point value);
void skip(int numberOfBytes);
}

View File

@@ -1,5 +1,6 @@
package net.packet;
public interface Packet {
short getHeader();
byte[] getBytes();
}