Added flexibility to NetBuffer and the NetworkProtocol

This commit is contained in:
Josh Larson
2018-12-09 14:21:20 -06:00
parent f5b495ac0f
commit fa956cf5aa
4 changed files with 118 additions and 6 deletions

View File

@@ -1,5 +1,6 @@
plugins {
id 'java'
id "org.javamodularity.moduleplugin"
}
sourceCompatibility = 11
@@ -10,7 +11,7 @@ repositories {
}
dependencies {
compile group: 'me.joshlarson', name: 'jlcommon', version: '1.7.14'
compile group: 'me.joshlarson', name: 'jlcommon', version: '1.8.4'
compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.59'
testCompile 'junit:junit:4.12'
}

View File

@@ -49,18 +49,22 @@ public class NetBuffer {
private NetBuffer(ByteBuffer data) {
this.data = data;
this.size = data.array().length;
this.size = data.capacity();
}
public static final NetBuffer allocate(int size) {
public static NetBuffer allocate(int size) {
return new NetBuffer(ByteBuffer.allocate(size));
}
public static final NetBuffer wrap(byte [] data) {
public static NetBuffer allocateDirect(int size) {
return new NetBuffer(ByteBuffer.allocateDirect(size));
}
public static NetBuffer wrap(byte [] data) {
return new NetBuffer(ByteBuffer.wrap(data));
}
public static final NetBuffer wrap(ByteBuffer data) {
public static NetBuffer wrap(ByteBuffer data) {
return new NetBuffer(data);
}
@@ -92,10 +96,26 @@ public class NetBuffer {
data.position(data.position()+relative);
}
public void clear() {
data.clear();
}
public void flip() {
data.flip();
}
public void mark() {
data.mark();
}
public void rewind() {
data.rewind();
}
public void compact() {
data.compact();
}
public ByteBuffer getBuffer() {
return data;
}

View File

@@ -51,6 +51,18 @@ public class NetworkProtocol {
return data;
}
public static boolean canDecode(NetBuffer buffer) throws IOException {
if (buffer.remaining() < 4)
return false;
int length = buffer.getInt();
buffer.seek(-4);
if (length < 0)
throw new IOException("Stream corrupted");
return length <= buffer.remaining();
}
public static boolean canDecode(NetBufferStream buffer) throws IOException {
if (buffer.remaining() < 4)
return false;
@@ -63,11 +75,21 @@ public class NetworkProtocol {
return length <= buffer.remaining();
}
public static SWGPacket decode(NetBuffer buffer) throws IOException {
if (!canDecode(buffer))
return null;
return decodePacket(NetBuffer.wrap(buffer.getArray(buffer.getInt())));
}
public static SWGPacket decode(NetBufferStream buffer) throws IOException {
if (!canDecode(buffer))
return null;
NetBuffer swg = NetBuffer.wrap(buffer.getArray(buffer.getInt()));
return decodePacket(NetBuffer.wrap(buffer.getArray(buffer.getInt())));
}
private static SWGPacket decodePacket(NetBuffer swg) {
if (swg.remaining() < 6)
return null;

View File

@@ -0,0 +1,69 @@
module pswgcommon {
requires org.jetbrains.annotations;
requires bcprov.jdk15on;
requires me.joshlarson.jlcommon;
requires java.sql;
requires java.desktop;
exports com.projectswg.common.data;
exports com.projectswg.common.data.combat;
exports com.projectswg.common.data.customization;
exports com.projectswg.common.data.encodables.chat;
exports com.projectswg.common.data.encodables.galaxy;
exports com.projectswg.common.data.encodables.map;
exports com.projectswg.common.data.encodables.oob;
exports com.projectswg.common.data.encodables.oob.waypoint;
exports com.projectswg.common.data.encodables.player;
exports com.projectswg.common.data.encodables.tangible;
exports com.projectswg.common.data.info;
exports com.projectswg.common.data.location;
exports com.projectswg.common.data.math;
exports com.projectswg.common.data.math.extents;
exports com.projectswg.common.data.objects;
exports com.projectswg.common.data.radial;
exports com.projectswg.common.data.schematic;
exports com.projectswg.common.data.sui;
exports com.projectswg.common.data.swgfile;
exports com.projectswg.common.data.swgfile.visitors;
exports com.projectswg.common.data.swgfile.visitors.appearance;
exports com.projectswg.common.data.swgfile.visitors.appearance.render;
exports com.projectswg.common.data.swgfile.visitors.shader;
exports com.projectswg.common.data.swgiff;
exports com.projectswg.common.data.swgiff.parsers;
exports com.projectswg.common.data.swgiff.parsers.appearance;
exports com.projectswg.common.data.swgiff.parsers.appearance.extents;
exports com.projectswg.common.data.swgiff.parsers.footprint;
exports com.projectswg.common.data.swgiff.parsers.math;
exports com.projectswg.common.data.swgiff.parsers.misc;
exports com.projectswg.common.data.swgiff.parsers.terrain;
exports com.projectswg.common.encoding;
exports com.projectswg.common.network;
exports com.projectswg.common.network.packets;
exports com.projectswg.common.network.packets.swg;
exports com.projectswg.common.network.packets.swg.admin;
exports com.projectswg.common.network.packets.swg.holo;
exports com.projectswg.common.network.packets.swg.holo.login;
exports com.projectswg.common.network.packets.swg.login;
exports com.projectswg.common.network.packets.swg.login.creation;
exports com.projectswg.common.network.packets.swg.zone;
exports com.projectswg.common.network.packets.swg.zone.auction;
exports com.projectswg.common.network.packets.swg.zone.baselines;
exports com.projectswg.common.network.packets.swg.zone.building;
exports com.projectswg.common.network.packets.swg.zone.chat;
exports com.projectswg.common.network.packets.swg.zone.combat;
exports com.projectswg.common.network.packets.swg.zone.crafting.resources;
exports com.projectswg.common.network.packets.swg.zone.crafting.surveying;
exports com.projectswg.common.network.packets.swg.zone.deltas;
exports com.projectswg.common.network.packets.swg.zone.harvesters;
exports com.projectswg.common.network.packets.swg.zone.insertion;
exports com.projectswg.common.network.packets.swg.zone.object_controller;
exports com.projectswg.common.network.packets.swg.zone.object_controller.combat;
exports com.projectswg.common.network.packets.swg.zone.object_controller.loot;
exports com.projectswg.common.network.packets.swg.zone.resource;
exports com.projectswg.common.network.packets.swg.zone.server_ui;
exports com.projectswg.common.network.packets.swg.zone.spatial;
exports com.projectswg.common.network.packets.swg.zone.trade;
exports com.projectswg.common.persistable;
exports com.projectswg.common.process;
exports com.projectswg.common.utilities;
}