mirror of
https://bitbucket.org/projectswg/pswgcommon.git
synced 2026-01-16 23:04:32 -05:00
Added flexibility to NetBuffer and the NetworkProtocol
This commit is contained in:
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
69
src/main/java/module-info.java
Normal file
69
src/main/java/module-info.java
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user