diff --git a/src/network/packets/Packet.java b/src/network/packets/Packet.java index d38ecdeb5..9c935bd12 100644 --- a/src/network/packets/Packet.java +++ b/src/network/packets/Packet.java @@ -28,35 +28,23 @@ package network.packets; import java.net.SocketAddress; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; import com.projectswg.common.data.CRC; -import com.projectswg.common.debug.Log; -import com.projectswg.common.encoding.Encodable; -import com.projectswg.common.encoding.StringType; +import com.projectswg.common.network.NetBuffer; - -public class Packet { +public abstract class Packet { public static final Charset ascii = Charset.forName("UTF-8"); public static final Charset unicode = Charset.forName("UTF-16LE"); private SocketAddress socketAddress; - private ByteBuffer data; - private int opcode; public Packet() { socketAddress = null; - data = ByteBuffer.allocate(2); - opcode = 0; } - public Packet(ByteBuffer data) { + public Packet(NetBuffer data) { decode(data); } @@ -64,301 +52,18 @@ public class Packet { this.socketAddress = socketAddress; } - public void setOpcode(int opcode) { - this.opcode = opcode; - } - public SocketAddress getSocketAddress() { return socketAddress; } - public int getOpcode() { - return opcode; - } - protected static int getCrc(String str) { return CRC.getCrc(str); } - public static void addList(ByteBuffer bb, Collection list) { - if (list == null) { - addInt(bb, 0); - return; - } - - addInt(bb, list.size()); - for (Encodable encodable : list) { - addData(bb, encodable.encode()); - } - } - - public static void addList(ByteBuffer bb, List list) { - addInt(bb, list.size()); - for (byte[] bytes : list) { - addData(bb, bytes); - } - } - - public static void addList(ByteBuffer bb, List list, StringType type) { - addInt(bb, list.size()); - - switch(type) { - case ASCII: for (String s : list) { addAscii(bb, s); } - break; - case UNICODE: for (String s : list) { addUnicode(bb, s); } - break; - default: Log.e("Cannot encode StringType " + type); - break; - } - } - - public static void addBoolean(ByteBuffer bb, boolean b) { - bb.put(b ? (byte) 1 : (byte) 0); - } - - public static void addAscii(ByteBuffer bb, String s) { - bb.order(ByteOrder.LITTLE_ENDIAN); - bb.putShort((short) s.length()); - bb.put(s.getBytes(ascii)); - } - - public static void addUnicode(ByteBuffer bb, String s) { - bb.order(ByteOrder.LITTLE_ENDIAN); - bb.putInt(s.length()); - bb.put(s.getBytes(unicode)); - } - - public static void addLong(ByteBuffer bb, long l) { - bb.order(ByteOrder.LITTLE_ENDIAN).putLong(l); - } - - public static void addInt(ByteBuffer bb, int i) { - bb.order(ByteOrder.LITTLE_ENDIAN).putInt(i); - } - - public static void addFloat(ByteBuffer bb, float f) { - bb.putFloat(f); - } - - public static void addShort(ByteBuffer bb, int i) { - bb.order(ByteOrder.LITTLE_ENDIAN).putShort((short) i); - } - - public static void addNetLong(ByteBuffer bb, long l) { - bb.order(ByteOrder.BIG_ENDIAN).putLong(l); - } - - public static void addNetInt(ByteBuffer bb, int i) { - bb.order(ByteOrder.BIG_ENDIAN).putInt(i); - } - - public static void addNetShort(ByteBuffer bb, int i) { - bb.order(ByteOrder.BIG_ENDIAN).putShort((short) i); - } - - public static void addByte(ByteBuffer bb, int b) { - bb.put((byte) b); - } - - public static void addData(ByteBuffer bb, byte[] data) { - bb.put(data); - } - - public static void addArray(ByteBuffer bb, byte[] data) { - bb.order(ByteOrder.LITTLE_ENDIAN); - addShort(bb, data.length); - addData(bb, data); - } - - public static void addArrayList(ByteBuffer bb, byte[] b) { - addShort(bb, b.length); - bb.put(b); - } - - public static void addEncodable(ByteBuffer data, Encodable encodable) { - data.put(encodable.encode()); - } - - public static void addCrc(ByteBuffer bb, String crcString) { - addInt(bb, CRC.getCrc(crcString)); - } - - public static boolean getBoolean(ByteBuffer bb) { - return getByte(bb) == 1; - } - - public static String getAscii(ByteBuffer bb) { - bb.order(ByteOrder.LITTLE_ENDIAN); - short length = bb.getShort(); - if (length > bb.remaining()) - return ""; - byte [] str = new byte[length]; - bb.get(str); - return new String(str, ascii); - } - - public static String getUnicode(ByteBuffer bb) { - bb.order(ByteOrder.LITTLE_ENDIAN); - int length = bb.getInt() * 2; - if (length > bb.remaining()) - return ""; - byte [] str = new byte[length]; - bb.get(str); - return new String(str, unicode); - } - - public static byte getByte(ByteBuffer bb) { - return bb.get(); - } - - public static short getShort(ByteBuffer bb) { - return bb.order(ByteOrder.LITTLE_ENDIAN).getShort(); - } - - public static int getInt(ByteBuffer bb) { - return bb.order(ByteOrder.LITTLE_ENDIAN).getInt(); - } - - public static float getFloat(ByteBuffer bb) { - return bb.getFloat(); - } - - public static long getLong(ByteBuffer bb) { - return bb.order(ByteOrder.LITTLE_ENDIAN).getLong(); - } - - public static short getNetShort(ByteBuffer bb) { - return bb.order(ByteOrder.BIG_ENDIAN).getShort(); - } - - public static int getNetInt(ByteBuffer bb) { - return bb.order(ByteOrder.BIG_ENDIAN).getInt(); - } - - public static long getNetLong(ByteBuffer bb) { - return bb.order(ByteOrder.BIG_ENDIAN).getLong(); - } - - public static byte [] getArray(ByteBuffer bb) { - byte [] data = new byte[getShort(bb)]; - bb.get(data); - return data; - } - - public static byte [] getArray(ByteBuffer bb, int length) { - byte [] data = new byte[length]; - bb.get(data); - return data; - } - - public static int [] getIntArray(ByteBuffer bb) { - bb.order(ByteOrder.LITTLE_ENDIAN); - int [] ints = new int[bb.getInt()]; - for (int i = 0; i < ints.length; i++) - ints[i] = bb.getInt(); - return ints; - } - - public static int [] getIntArray(ByteBuffer bb, int size) { - bb.order(ByteOrder.LITTLE_ENDIAN); - int [] ints = new int[size]; - for (int i = 0; i < ints.length; i++) - ints[i] = bb.getInt(); - return ints; - } - - public static boolean[] getBooleanArray(ByteBuffer bb) { - bb.order(ByteOrder.LITTLE_ENDIAN); - boolean[] booleans = new boolean[bb.getInt()]; - for(int i = 0; i < booleans.length; i++) - booleans[i] = getBoolean(bb); - return booleans; - } - - /** - * Decodes the ByteBuffer stream into the passed List using the given listType instance for creating elements - * for the list from the buffer. - * @param bb ByteBuffer - * @param type Top-most class for the elements that are to be added to the list - * @param Class type that implements {@link Encodable} - * @return Amount of bytes that are read - */ - public static List getList(ByteBuffer bb, Class type) { - int size = getInt(bb); - - if (size < 0) { - Log.e("Read list with size less than zero!"); - return null; - } else if (size == 0) { - return new ArrayList<>(); - } - - List list = new ArrayList<>(); - - try { - for (int i = 0; i < size; i++) { - T instance = type.newInstance(); - instance.decode(bb); - list.add(instance); - } - } catch (InstantiationException | IllegalAccessException e) { - Log.e(e); - } - - if (size != list.size()) - Log.e("Expected list size %d but only have %d elements in the list", size, list.size()); - return list; - } - - public static T getEncodable(ByteBuffer bb, Class type) { - T instance = null; - try { - instance = type.newInstance(); - instance.decode(bb); - } catch (InstantiationException | IllegalAccessException e) { - Log.e(e); - } - - return instance; - } - - public static List getList(ByteBuffer bb, StringType type) { - int size = getInt(bb); - - if (size < 0) { - Log.e("Read list with size less than zero!"); - return null; - } else if (size == 0) { - return new ArrayList<>(); - } - - List list = new ArrayList<>(); - - switch(type) { - case ASCII: for (int i = 0; i < size; i++) { list.add(getAscii(bb)); } - break; - case UNICODE: for (int i = 0; i < size; i++) { list.add(getUnicode(bb)); } - break; - default: Log.e("Do not know how to read list of StringType " + type); - break; - } - - return list; - } - - public void decode(ByteBuffer data) { - this.data = data; - opcode = getNetShort(data); - } - - public ByteBuffer getData() { - return data; - } - - public ByteBuffer encode() { - return data; - } + public abstract void decode(NetBuffer data); + public abstract NetBuffer encode(); + @Override public String toString() { return getClass().getSimpleName(); } diff --git a/src/network/packets/swg/ErrorMessage.java b/src/network/packets/swg/ErrorMessage.java index c37a95fe5..c322da213 100644 --- a/src/network/packets/swg/ErrorMessage.java +++ b/src/network/packets/swg/ErrorMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class ErrorMessage extends SWGPacket { @@ -47,22 +47,23 @@ public class ErrorMessage extends SWGPacket { this.fatal = fatal; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - type = getAscii(data); - message = getAscii(data); - fatal = getBoolean(data); + type = data.getAscii(); + message = data.getAscii(); + fatal = data.getBoolean(); } - public ByteBuffer encode() { - int length = 11 + type.length() + message.length(); - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 3); - addInt( data, CRC); - addAscii(data, type); - addAscii(data, message); - addBoolean(data, fatal); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(11 + type.length() + message.length()); + data.addShort(3); + data.addInt(CRC); + data.addAscii(type); + data.addAscii(message); + data.addBoolean(fatal); return data; } } diff --git a/src/network/packets/swg/SWGPacket.java b/src/network/packets/swg/SWGPacket.java index 529efd06b..fe80574e5 100644 --- a/src/network/packets/swg/SWGPacket.java +++ b/src/network/packets/swg/SWGPacket.java @@ -27,24 +27,22 @@ ***********************************************************************************/ package network.packets.swg; -import java.nio.ByteBuffer; - import com.projectswg.common.data.CRC; import com.projectswg.common.debug.Log; +import com.projectswg.common.network.NetBuffer; import network.PacketType; import network.packets.Packet; -public class SWGPacket extends Packet { +public abstract class SWGPacket extends Packet { - private ByteBuffer data = null; - private int crc = 0; - private PacketType type = PacketType.UNKNOWN; - - public void setSWGOpcode(int opcode) { - this.crc = opcode; - this.type = PacketType.fromCrc(opcode); + private PacketType type; + private int crc; + + public SWGPacket() { + this.type = PacketType.UNKNOWN; + this.crc = 0; } public int getSWGOpcode() { @@ -55,34 +53,18 @@ public class SWGPacket extends Packet { return type; } - public boolean decode(ByteBuffer data, int crc) { - this.data = data; - super.decode(data); - setSWGOpcode(getInt(data)); - if (getSWGOpcode() == crc) + public boolean checkDecode(NetBuffer data, int crc) { + data.position(2); + this.crc = data.getInt(); + this.type = PacketType.fromCrc(crc); + if (this.crc == crc) return true; Log.w("SWG Opcode does not match actual! Expected: 0x%08X Actual: 0x%08X", crc, getSWGOpcode()); return false; } - public void decode(ByteBuffer data) { - this.data = data; - if (data.array().length < 6) - return; - data.position(2); - setSWGOpcode(getInt(data)); - data.position(0); - } - - public ByteBuffer encode() { - return data; - } - - public ByteBuffer getData() { - return data; - } - public static int getCrc(String string) { return CRC.getCrc(string); } + } diff --git a/src/network/packets/swg/ServerUnixEpochTime.java b/src/network/packets/swg/ServerUnixEpochTime.java index 819fe2f3c..37ba765a9 100644 --- a/src/network/packets/swg/ServerUnixEpochTime.java +++ b/src/network/packets/swg/ServerUnixEpochTime.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class ServerUnixEpochTime extends SWGPacket { @@ -43,17 +43,17 @@ public class ServerUnixEpochTime extends SWGPacket { this.time = time; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - time = getInt(data); + time = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt( data, CRC); - addInt( data, time); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(time); return data; } diff --git a/src/network/packets/swg/admin/AdminShutdownServer.java b/src/network/packets/swg/admin/AdminShutdownServer.java index 84b5c9c46..88baa903a 100644 --- a/src/network/packets/swg/admin/AdminShutdownServer.java +++ b/src/network/packets/swg/admin/AdminShutdownServer.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.admin; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class AdminShutdownServer extends AdminPacket { @@ -44,18 +44,18 @@ public class AdminShutdownServer extends AdminPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - shutdownTime = getShort(data); + shutdownTime = data.getShort(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8); - addShort(data, 1); - addInt(data, CRC); - addShort(data, shutdownTime); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8); + data.addShort(1); + data.addInt(CRC); + data.addShort(shutdownTime); return data; } diff --git a/src/network/packets/swg/holo/HoloConnectionStarted.java b/src/network/packets/swg/holo/HoloConnectionStarted.java index b14a770fc..acb0eebce 100644 --- a/src/network/packets/swg/holo/HoloConnectionStarted.java +++ b/src/network/packets/swg/holo/HoloConnectionStarted.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.holo; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class HoloConnectionStarted extends HoloPacket { @@ -38,16 +38,16 @@ public class HoloConnectionStarted extends HoloPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 1); - addInt(data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(1); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/holo/HoloConnectionStopped.java b/src/network/packets/swg/holo/HoloConnectionStopped.java index dbf65beea..c9a42ca8f 100644 --- a/src/network/packets/swg/holo/HoloConnectionStopped.java +++ b/src/network/packets/swg/holo/HoloConnectionStopped.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.holo; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class HoloConnectionStopped extends HoloPacket { @@ -44,22 +44,22 @@ public class HoloConnectionStopped extends HoloPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; try { - reason = ConnectionStoppedReason.valueOf(getAscii(data)); + reason = ConnectionStoppedReason.valueOf(data.getAscii()); } catch (IllegalArgumentException e) { reason = ConnectionStoppedReason.UNKNOWN; } } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8+reason.name().length()); - addShort(data, 1); - addInt(data, CRC); - addAscii(data, reason.name()); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8+reason.name().length()); + data.addShort(1); + data.addInt(CRC); + data.addAscii(reason.name()); return data; } diff --git a/src/network/packets/swg/holo/HoloPacket.java b/src/network/packets/swg/holo/HoloPacket.java index fdafad460..98a46b0f9 100644 --- a/src/network/packets/swg/holo/HoloPacket.java +++ b/src/network/packets/swg/holo/HoloPacket.java @@ -27,13 +27,13 @@ ***********************************************************************************/ package network.packets.swg.holo; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; public abstract class HoloPacket extends SWGPacket { - public abstract void decode(ByteBuffer data); - public abstract ByteBuffer encode(); + public abstract void decode(NetBuffer data); + public abstract NetBuffer encode(); } diff --git a/src/network/packets/swg/holo/HoloSetProtocolVersion.java b/src/network/packets/swg/holo/HoloSetProtocolVersion.java index abecfbb11..c3910b893 100644 --- a/src/network/packets/swg/holo/HoloSetProtocolVersion.java +++ b/src/network/packets/swg/holo/HoloSetProtocolVersion.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.holo; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class HoloSetProtocolVersion extends HoloPacket { @@ -44,18 +44,18 @@ public class HoloSetProtocolVersion extends HoloPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - protocol = getAscii(data); + protocol = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8 + protocol.length()); - addShort(data, 2); - addInt(data, CRC); - addAscii(data, protocol); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + protocol.length()); + data.addShort(2); + data.addInt(CRC); + data.addAscii(protocol); return data; } diff --git a/src/network/packets/swg/login/AccountFeatureBits.java b/src/network/packets/swg/login/AccountFeatureBits.java index b571b81fe..7275d5fdf 100644 --- a/src/network/packets/swg/login/AccountFeatureBits.java +++ b/src/network/packets/swg/login/AccountFeatureBits.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,20 +40,20 @@ public class AccountFeatureBits extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; // Not sure how to decode this.. still a mystery } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(22); - addShort(data, 2); - addInt( data, CRC); - addInt( data, 0x025C8231); - addInt( data, 1); - addInt( data, 6); - addInt( data, 0x4EEAC08A); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(22); + data.addShort(2); + data.addInt(CRC); + data.addInt(0x025C8231); + data.addInt(1); + data.addInt(6); + data.addInt(0x4EEAC08A); return data; } diff --git a/src/network/packets/swg/login/CharacterCreationDisabled.java b/src/network/packets/swg/login/CharacterCreationDisabled.java index 2a86414dd..d14d3f9a7 100644 --- a/src/network/packets/swg/login/CharacterCreationDisabled.java +++ b/src/network/packets/swg/login/CharacterCreationDisabled.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -46,26 +46,26 @@ public class CharacterCreationDisabled extends SWGPacket { this.serverNames = serverNames; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - int listSize = getInt(data); + int listSize = data.getInt(); serverNames = new String[listSize]; for (int i = 0; i < listSize; i++) { - serverNames[i] = getAscii(data); + serverNames[i] = data.getAscii(); } } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 10; for (int i = 0; i < serverNames.length; i++) length += 2 + serverNames[i].length(); - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 2); - addInt( data, CRC); - addInt( data, serverNames.length); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addInt(serverNames.length); for (int i = 0; i < serverNames.length; i++) { - addAscii(data, serverNames[i]); + data.addAscii(serverNames[i]); } return data; } diff --git a/src/network/packets/swg/login/ClientIdMsg.java b/src/network/packets/swg/login/ClientIdMsg.java index e252bf385..3446c1ef4 100644 --- a/src/network/packets/swg/login/ClientIdMsg.java +++ b/src/network/packets/swg/login/ClientIdMsg.java @@ -27,12 +27,13 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; public class ClientIdMsg extends SWGPacket { + public static final int CRC = getCrc("ClientIdMsg"); private int gameBitsToClear; @@ -43,7 +44,7 @@ public class ClientIdMsg extends SWGPacket { this(0, new byte[0], ""); } - public ClientIdMsg(ByteBuffer data) { + public ClientIdMsg(NetBuffer data) { decode(data); } @@ -53,24 +54,23 @@ public class ClientIdMsg extends SWGPacket { this.version = version; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - gameBitsToClear = getInt(data); - int sessionKeyLength = getInt(data); - sessionToken = new byte[sessionKeyLength]; - data.get(sessionToken); - version = getAscii(data); + gameBitsToClear = data.getInt(); + sessionToken = data.getArrayLarge(); + version = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(16 + sessionToken.length + version.length()); - addShort(data, 4); - addInt( data, CRC); - addInt( data, gameBitsToClear); - addInt( data, sessionToken.length); - data.put(sessionToken); - addAscii(data, version); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + sessionToken.length + version.length()); + data.addShort(4); + data.addInt(CRC); + data.addInt(gameBitsToClear); + data.addArrayLarge(sessionToken); + data.addAscii(version); return data; } diff --git a/src/network/packets/swg/login/ClientPermissionsMessage.java b/src/network/packets/swg/login/ClientPermissionsMessage.java index 662597939..cbc7952f1 100644 --- a/src/network/packets/swg/login/ClientPermissionsMessage.java +++ b/src/network/packets/swg/login/ClientPermissionsMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -47,23 +47,23 @@ public class ClientPermissionsMessage extends SWGPacket { canSkipTutorial = true; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - canLogin = getBoolean(data); - canCreateRegularCharacter = getBoolean(data); - canCreateJediCharacter = getBoolean(data); - canSkipTutorial = getBoolean(data); + canLogin = data.getBoolean(); + canCreateRegularCharacter = data.getBoolean(); + canCreateJediCharacter = data.getBoolean(); + canSkipTutorial = data.getBoolean(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort( data, 5); - addInt( data, CRC); - addBoolean(data, canLogin); - addBoolean(data, canCreateRegularCharacter); - addBoolean(data, canCreateJediCharacter); - addBoolean(data, canSkipTutorial); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(5); + data.addInt(CRC); + data.addBoolean(canLogin); + data.addBoolean(canCreateRegularCharacter); + data.addBoolean(canCreateJediCharacter); + data.addBoolean(canSkipTutorial); return data; } diff --git a/src/network/packets/swg/login/ConnectionServerLagResponse.java b/src/network/packets/swg/login/ConnectionServerLagResponse.java index 48b3bd1fe..d9b80cb9c 100644 --- a/src/network/packets/swg/login/ConnectionServerLagResponse.java +++ b/src/network/packets/swg/login/ConnectionServerLagResponse.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,15 +40,15 @@ public class ConnectionServerLagResponse extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 1); - addInt( data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(1); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/login/EnumerateCharacterId.java b/src/network/packets/swg/login/EnumerateCharacterId.java index c3e3aacf7..dfff0e13f 100644 --- a/src/network/packets/swg/login/EnumerateCharacterId.java +++ b/src/network/packets/swg/login/EnumerateCharacterId.java @@ -27,8 +27,11 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; -import java.util.Vector; +import java.util.ArrayList; +import java.util.List; + +import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -36,49 +39,42 @@ import network.packets.swg.SWGPacket; public class EnumerateCharacterId extends SWGPacket { public static final int CRC = getCrc("EnumerateCharacterId"); - private SWGCharacter [] characters; + private List characters; public EnumerateCharacterId() { - characters = new SWGCharacter[0]; + this.characters = new ArrayList<>(); } - public EnumerateCharacterId(SWGCharacter [] characters) { - this.characters = characters; + public EnumerateCharacterId(List characters) { + this.characters = new ArrayList<>(characters); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - int characterLength = getInt(data); - Vector _characters = new Vector(); - for (int i = 0; i < characterLength; i++) { - SWGCharacter c = new SWGCharacter(); - c.decode(data); - _characters.add(c); - } - characters = _characters.toArray(new SWGCharacter[characters.length]); + characters = data.getList(SWGCharacter.class); } - public ByteBuffer encode() { + @Override + public NetBuffer encode() { int length = 10; - for (int i = 0; i < characters.length; i++) { - length += characters[i].getLength(); - } - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 2); - addInt( data, CRC); - addInt( data, characters.length); for (SWGCharacter c : characters) { - data.put(c.encode().array()); + length += c.getLength(); } + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addList(characters); return data; } - public SWGCharacter [] getCharacters () { + public List getCharacters() { return characters; } - public static class SWGCharacter extends EnumerateCharacterId { + public static class SWGCharacter implements Encodable { + private String name; private int raceCrc; private long id; @@ -101,22 +97,24 @@ public class EnumerateCharacterId extends SWGPacket { return 24 + name.length() * 2; } - public void decode(ByteBuffer data) { - name = getUnicode(data); - raceCrc = getInt(data); - id = getLong(data); - galaxyId = getInt(data); - type = getInt(data); + @Override + public void decode(NetBuffer data) { + name = data.getUnicode(); + raceCrc = data.getInt(); + id = data.getLong(); + galaxyId = data.getInt(); + type = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(getLength()); - addUnicode(data, name); - addInt( data, raceCrc); - addLong( data, id); - addInt( data, galaxyId); - addInt( data, type); - return data; + @Override + public byte [] encode() { + NetBuffer data = NetBuffer.allocate(getLength()); + data.addUnicode(name); + data.addInt(raceCrc); + data.addLong(id); + data.addInt(galaxyId); + data.addInt(type); + return data.array(); } public void setId(long id) { this.id = id; } @@ -131,6 +129,7 @@ public class EnumerateCharacterId extends SWGPacket { public int getGalaxyId() { return galaxyId; } public int getType() { return type; } + @Override public String toString() { return String.format("SWGCharacter[id=%d name=%s race=%d galaxy=%d type=%d", id, name, raceCrc, galaxyId, type); } diff --git a/src/network/packets/swg/login/LoginClientId.java b/src/network/packets/swg/login/LoginClientId.java index d6de87193..76e15b69c 100644 --- a/src/network/packets/swg/login/LoginClientId.java +++ b/src/network/packets/swg/login/LoginClientId.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,7 +43,7 @@ public class LoginClientId extends SWGPacket { this("", "", ""); } - public LoginClientId(ByteBuffer data) { + public LoginClientId(NetBuffer data) { decode(data); } @@ -53,22 +53,22 @@ public class LoginClientId extends SWGPacket { this.version = version; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - username = getAscii(data); - password = getAscii(data); - version = getAscii(data); + username = data.getAscii(); + password = data.getAscii(); + version = data.getAscii(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 6 + 6 + username.length() * 2 + password.length() * 2 + version.length() * 2; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 4); - addInt( data, CRC); - addAscii(data, username); - addAscii(data, password); - addAscii(data, version); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(4); + data.addInt(CRC); + data.addAscii(username); + data.addAscii(password); + data.addAscii(version); return data; } diff --git a/src/network/packets/swg/login/LoginClientToken.java b/src/network/packets/swg/login/LoginClientToken.java index 1ff573c4a..44531ec19 100644 --- a/src/network/packets/swg/login/LoginClientToken.java +++ b/src/network/packets/swg/login/LoginClientToken.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,7 +43,7 @@ public class LoginClientToken extends SWGPacket { } - public LoginClientToken(ByteBuffer data) { + public LoginClientToken(NetBuffer data) { decode(data); } @@ -53,27 +53,24 @@ public class LoginClientToken extends SWGPacket { this.username = username; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - int sessionKeyLength = getInt(data); - if (sessionKeyLength > data.remaining()) - return; - sessionKey = new byte[sessionKeyLength]; - data.get(sessionKey); - userId = getInt(data); - username = getAscii(data); + sessionKey = data.getArrayLarge(); + userId = data.getInt(); + username = data.getAscii(); } - public ByteBuffer encode() { + @Override + public NetBuffer encode() { int length = 16 + sessionKey.length + username.length(); - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 4); - addInt( data, CRC); - addInt( data, sessionKey.length); - data.put(sessionKey); - addInt( data, userId); - addAscii(data, username); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(4); + data.addInt(CRC); + data.addArrayLarge(sessionKey); + data.addInt(userId); + data.addAscii(username); return data; } diff --git a/src/network/packets/swg/login/LoginClusterStatus.java b/src/network/packets/swg/login/LoginClusterStatus.java index 4e0405eea..c5dcf1fc5 100644 --- a/src/network/packets/swg/login/LoginClusterStatus.java +++ b/src/network/packets/swg/login/LoginClusterStatus.java @@ -27,11 +27,12 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; import java.time.ZoneOffset; import java.util.List; import java.util.Vector; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; import resources.Galaxy; @@ -46,49 +47,49 @@ public class LoginClusterStatus extends SWGPacket { galaxies = new Vector(); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - int serverCount = getInt(data); + int serverCount = data.getInt(); for (int i = 0; i < serverCount; i++) { Galaxy g = new Galaxy(); - g.setId(getInt(data)); - g.setAddress(getAscii(data)); - g.setZonePort(getShort(data)); - g.setPingPort(getShort(data)); - g.setPopulation(getInt(data)); - getInt(data); // population status - g.setMaxCharacters(getInt(data)); - g.setZoneOffset(ZoneOffset.ofTotalSeconds(getInt(data))); - g.setStatus(getInt(data)); - g.setRecommended(getBoolean(data)); - g.setOnlinePlayerLimit(getInt(data)); - g.setOnlineFreeTrialLimit(getInt(data)); + g.setId(data.getInt()); + g.setAddress(data.getAscii()); + g.setZonePort(data.getShort()); + g.setPingPort(data.getShort()); + g.setPopulation(data.getInt()); + data.getInt(); // population status + g.setMaxCharacters(data.getInt()); + g.setZoneOffset(ZoneOffset.ofTotalSeconds(data.getInt())); + g.setStatus(data.getInt()); + g.setRecommended(data.getBoolean()); + g.setOnlinePlayerLimit(data.getInt()); + g.setOnlineFreeTrialLimit(data.getInt()); galaxies.add(g); } } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 10; for (Galaxy g : galaxies) length += 39 + g.getAddress().length(); - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 2); - addInt( data, CRC); - addInt( data, galaxies.size()); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addInt(galaxies.size()); for (Galaxy g : galaxies) { - addInt( data, g.getId()); - addAscii( data, g.getAddress()); - addShort( data, g.getZonePort()); - addShort( data, g.getPingPort()); - addInt( data, g.getPopulation()); - addInt( data, g.getPopulationStatus()); - addInt( data, g.getMaxCharacters()); - addInt( data, g.getDistance()); - addInt( data, g.getStatus().getStatus()); - addBoolean(data, g.isRecommended()); - addInt( data, g.getOnlinePlayerLimit()); - addInt( data, g.getOnlineFreeTrialLimit()); + data.addInt(g.getId()); + data.addAscii(g.getAddress()); + data.addShort(g.getZonePort()); + data.addShort(g.getPingPort()); + data.addInt(g.getPopulation()); + data.addInt(g.getPopulationStatus()); + data.addInt(g.getMaxCharacters()); + data.addInt(g.getDistance()); + data.addInt(g.getStatus().getStatus()); + data.addBoolean(g.isRecommended()); + data.addInt(g.getOnlinePlayerLimit()); + data.addInt(g.getOnlineFreeTrialLimit()); } return data; } diff --git a/src/network/packets/swg/login/LoginEnumCluster.java b/src/network/packets/swg/login/LoginEnumCluster.java index fbe79ef69..0b82cb6f5 100644 --- a/src/network/packets/swg/login/LoginEnumCluster.java +++ b/src/network/packets/swg/login/LoginEnumCluster.java @@ -27,11 +27,12 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; import java.time.ZoneOffset; import java.util.List; import java.util.Vector; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; import resources.Galaxy; @@ -52,34 +53,34 @@ public class LoginEnumCluster extends SWGPacket { this.maxCharacters = maxCharacters; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - int serverCount = getInt(data); + int serverCount = data.getInt(); for (int i = 0; i < serverCount; i++) { Galaxy g = new Galaxy(); - g.setId(getInt(data)); - g.setName(getAscii(data)); - g.setZoneOffset(ZoneOffset.ofTotalSeconds(getInt(data))); + g.setId(data.getInt()); + g.setName(data.getAscii()); + g.setZoneOffset(ZoneOffset.ofTotalSeconds(data.getInt())); galaxies.add(g); } - maxCharacters = getInt(data); + maxCharacters = data.getInt(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 14; for (Galaxy g : galaxies) length += 10 + g.getName().length(); - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 3); - addInt( data, CRC); - addInt( data, galaxies.size()); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(3); + data.addInt(CRC); + data.addInt(galaxies.size()); for (Galaxy g : galaxies) { - addInt( data, g.getId()); - addAscii(data, g.getName()); - addInt( data, g.getDistance()); + data.addInt(g.getId()); + data.addAscii(g.getName()); + data.addInt(g.getDistance()); } - addInt(data, maxCharacters); + data.addInt(maxCharacters); return data; } diff --git a/src/network/packets/swg/login/LoginIncorrectClientId.java b/src/network/packets/swg/login/LoginIncorrectClientId.java index 8398d2146..d524e768b 100644 --- a/src/network/packets/swg/login/LoginIncorrectClientId.java +++ b/src/network/packets/swg/login/LoginIncorrectClientId.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -41,7 +41,7 @@ public class LoginIncorrectClientId extends SWGPacket { this("", ""); } - public LoginIncorrectClientId(ByteBuffer data) { + public LoginIncorrectClientId(NetBuffer data) { decode(data); } @@ -50,19 +50,19 @@ public class LoginIncorrectClientId extends SWGPacket { this.serverAppVersion = serverAppVersion; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - serverId = getAscii(data); - serverAppVersion = getAscii(data); + serverId = data.getAscii(); + serverAppVersion = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10 + serverId.length() + serverAppVersion.length()); - addShort(data, 4); - addInt(data, CRC); - addAscii(data, serverId); - addAscii(data, serverAppVersion); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10 + serverId.length() + serverAppVersion.length()); + data.addShort(4); + data.addInt(CRC); + data.addAscii(serverId); + data.addAscii(serverAppVersion); return data; } diff --git a/src/network/packets/swg/login/OfflineServersMessage.java b/src/network/packets/swg/login/OfflineServersMessage.java index 8df3c76e2..8cace4594 100644 --- a/src/network/packets/swg/login/OfflineServersMessage.java +++ b/src/network/packets/swg/login/OfflineServersMessage.java @@ -27,10 +27,11 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; public class OfflineServersMessage extends SWGPacket { @@ -47,29 +48,29 @@ public class OfflineServersMessage extends SWGPacket { this.offlineServers = offline; } - public OfflineServersMessage(ByteBuffer data) { + public OfflineServersMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - int listCount = getInt(data); + int listCount = data.getInt(); offlineServers = new ArrayList(listCount); for (int i = 0 ; i < listCount; i++) - offlineServers.add(getAscii(data)); + offlineServers.add(data.getAscii()); } - public ByteBuffer encode() { + public NetBuffer encode() { int strLength = 0; for (String str : offlineServers) strLength += 2 + str.length(); - ByteBuffer data = ByteBuffer.allocate(10 + strLength); - addShort(data, 2); - addInt( data, CRC); - addInt(data, offlineServers.size()); + NetBuffer data = NetBuffer.allocate(10 + strLength); + data.addShort(2); + data.addInt(CRC); + data.addInt(offlineServers.size()); for (String str : offlineServers) - addAscii(data, str); + data.addAscii(str); return data; } diff --git a/src/network/packets/swg/login/RequestExtendedClusters.java b/src/network/packets/swg/login/RequestExtendedClusters.java index ed7208a96..18954cf80 100644 --- a/src/network/packets/swg/login/RequestExtendedClusters.java +++ b/src/network/packets/swg/login/RequestExtendedClusters.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,16 +40,16 @@ public class RequestExtendedClusters extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt( data, CRC); - addInt( data, 0); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(0); return data; } } diff --git a/src/network/packets/swg/login/ServerId.java b/src/network/packets/swg/login/ServerId.java index ab70953ef..8f9931dd3 100644 --- a/src/network/packets/swg/login/ServerId.java +++ b/src/network/packets/swg/login/ServerId.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,17 +45,17 @@ public class ServerId extends SWGPacket { this.serverId = id; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - serverId = getInt(data); + serverId = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt( data, CRC); - addInt( data, serverId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(serverId); return data; } diff --git a/src/network/packets/swg/login/ServerString.java b/src/network/packets/swg/login/ServerString.java index 06259d214..cb94a69a3 100644 --- a/src/network/packets/swg/login/ServerString.java +++ b/src/network/packets/swg/login/ServerString.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,17 +45,17 @@ public class ServerString extends SWGPacket { this.serverName = name; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - serverName = getAscii(data); + serverName = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8 + serverName.length()); - addShort(data, 2); - addInt( data, CRC); - addAscii(data, serverName); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + serverName.length()); + data.addShort(2); + data.addInt(CRC); + data.addAscii(serverName); return data; } diff --git a/src/network/packets/swg/login/StationIdHasJediSlot.java b/src/network/packets/swg/login/StationIdHasJediSlot.java index 59527491e..bbd75c0bb 100644 --- a/src/network/packets/swg/login/StationIdHasJediSlot.java +++ b/src/network/packets/swg/login/StationIdHasJediSlot.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -46,17 +46,17 @@ public class StationIdHasJediSlot extends SWGPacket { this.jedi = jedi; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - jedi = getInt(data); + jedi = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt( data, CRC); - addInt( data, jedi); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(jedi); return data; } diff --git a/src/network/packets/swg/login/creation/ClientCreateCharacter.java b/src/network/packets/swg/login/creation/ClientCreateCharacter.java index 0080b941d..74c82053c 100644 --- a/src/network/packets/swg/login/creation/ClientCreateCharacter.java +++ b/src/network/packets/swg/login/creation/ClientCreateCharacter.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -53,47 +53,47 @@ public class ClientCreateCharacter extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - charCustomization = getArray(data); - name = getUnicode(data); - race = getAscii(data); - start = getAscii(data); - hair = getAscii(data); - hairCustomization = getArray(data); - clothes = getAscii(data); - jedi = getBoolean(data); - height = getFloat(data); - biography = getUnicode(data); - tutorial = getBoolean(data); - profession = getAscii(data); - startingPhase = getAscii(data); + charCustomization = data.getArray(); + name = data.getUnicode(); + race = data.getAscii(); + start = data.getAscii(); + hair = data.getAscii(); + hairCustomization = data.getArray(); + clothes = data.getAscii(); + jedi = data.getBoolean(); + height = data.getFloat(); + biography = data.getUnicode(); + tutorial = data.getBoolean(); + profession = data.getAscii(); + startingPhase = data.getAscii(); } - public ByteBuffer encode() { + public NetBuffer encode() { int extraSize = charCustomization.length; extraSize += name.length()*2; extraSize += race.length() + start.length(); extraSize += hair.length() + hairCustomization.length; extraSize += clothes.length() + profession.length(); extraSize += startingPhase.length(); - ByteBuffer data = ByteBuffer.allocate(36+extraSize); - addShort (data, 2); - addInt (data, CRC); - addArrayList(data, charCustomization); - addUnicode(data, name); - addAscii (data, race); - addAscii (data, start); - addAscii (data, hair); - addArrayList(data, hairCustomization); - addAscii (data, clothes); - addBoolean(data, jedi); - addFloat (data, height); - addUnicode(data, biography); - addBoolean(data, tutorial); - addAscii (data, profession); - addAscii (data, startingPhase); + NetBuffer data = NetBuffer.allocate(36+extraSize); + data.addShort(2); + data.addInt(CRC); + data.addArray(charCustomization); + data.addUnicode(name); + data.addAscii(race); + data.addAscii(start); + data.addAscii(hair); + data.addArray(hairCustomization); + data.addAscii(clothes); + data.addBoolean(jedi); + data.addFloat(height); + data.addUnicode(biography); + data.addBoolean(tutorial); + data.addAscii(profession); + data.addAscii(startingPhase); return data; } diff --git a/src/network/packets/swg/login/creation/ClientVerifyAndLockNameRequest.java b/src/network/packets/swg/login/creation/ClientVerifyAndLockNameRequest.java index 3fdaef0dc..1238d9966 100644 --- a/src/network/packets/swg/login/creation/ClientVerifyAndLockNameRequest.java +++ b/src/network/packets/swg/login/creation/ClientVerifyAndLockNameRequest.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -47,19 +47,19 @@ public class ClientVerifyAndLockNameRequest extends SWGPacket { this.name = name; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - race = getAscii(data); - name = getUnicode(data); + race = data.getAscii(); + name = data.getUnicode(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10 + race.length() + name.length() * 2); - addShort( data, 4); - addInt( data, CRC); - addAscii( data, race); - addUnicode(data, name); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10 + race.length() + name.length() * 2); + data.addShort(4); + data.addInt(CRC); + data.addAscii(race); + data.addUnicode(name); return data; } diff --git a/src/network/packets/swg/login/creation/ClientVerifyAndLockNameResponse.java b/src/network/packets/swg/login/creation/ClientVerifyAndLockNameResponse.java index e4abe3749..c7880b72e 100644 --- a/src/network/packets/swg/login/creation/ClientVerifyAndLockNameResponse.java +++ b/src/network/packets/swg/login/creation/ClientVerifyAndLockNameResponse.java @@ -27,9 +27,10 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; import java.util.Locale; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; @@ -48,23 +49,23 @@ public class ClientVerifyAndLockNameResponse extends SWGPacket { this.error = error; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - name = getUnicode(data); - getAscii(data); // ui - getInt(data); - error = ErrorMessage.valueOf(getAscii(data).toUpperCase(Locale.US)); + name = data.getUnicode(); + data.getAscii(); // ui + data.getInt(); + error = ErrorMessage.valueOf(data.getAscii().toUpperCase(Locale.US)); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(20 + error.name().length() + name.length() * 2); - addShort( data, 9); - addInt( data, CRC); - addUnicode(data, name); - addAscii( data, "ui"); - addInt( data, 0); - addAscii( data, error.name().toLowerCase(Locale.US)); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(20 + error.name().length() + name.length() * 2); + data.addShort(9); + data.addInt(CRC); + data.addUnicode(name); + data.addAscii("ui"); + data.addInt(0); + data.addAscii(error.name().toLowerCase(Locale.US)); return data; } diff --git a/src/network/packets/swg/login/creation/CreateCharacterFailure.java b/src/network/packets/swg/login/creation/CreateCharacterFailure.java index b8088239c..696ca60d5 100644 --- a/src/network/packets/swg/login/creation/CreateCharacterFailure.java +++ b/src/network/packets/swg/login/creation/CreateCharacterFailure.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,19 +45,19 @@ public class CreateCharacterFailure extends SWGPacket { this.reason = reason; } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { } - public ByteBuffer encode() { + public NetBuffer encode() { String errorString = nameFailureTranslation(reason); - ByteBuffer data = ByteBuffer.allocate(20 + errorString.length()); - addShort( data, 3); - addInt( data, CRC); - addUnicode(data, ""); - addAscii( data, "ui"); - addInt( data, 0); - addAscii( data, errorString); + NetBuffer data = NetBuffer.allocate(20 + errorString.length()); + data.addShort(3); + data.addInt(CRC); + data.addUnicode(""); + data.addAscii("ui"); + data.addInt(0); + data.addAscii(errorString); return data; } diff --git a/src/network/packets/swg/login/creation/CreateCharacterSuccess.java b/src/network/packets/swg/login/creation/CreateCharacterSuccess.java index c5c2bdb69..83c8d4e81 100644 --- a/src/network/packets/swg/login/creation/CreateCharacterSuccess.java +++ b/src/network/packets/swg/login/creation/CreateCharacterSuccess.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,17 +45,17 @@ public class CreateCharacterSuccess extends SWGPacket { this.id = charId; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - id = getLong(data); + id = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 2); - addInt( data, CRC); - addLong( data, id); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(2); + data.addInt(CRC); + data.addLong(id); return data; } diff --git a/src/network/packets/swg/login/creation/DeleteCharacterRequest.java b/src/network/packets/swg/login/creation/DeleteCharacterRequest.java index c449b8a9a..650eb3312 100644 --- a/src/network/packets/swg/login/creation/DeleteCharacterRequest.java +++ b/src/network/packets/swg/login/creation/DeleteCharacterRequest.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -47,19 +47,19 @@ public class DeleteCharacterRequest extends SWGPacket { this.playerId = playerId; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - serverId = getInt(data); - playerId = getLong(data); + serverId = data.getInt(); + playerId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(18); - addShort(data, 3); - addInt( data, CRC); - addInt( data, serverId); - addLong( data, playerId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(18); + data.addShort(3); + data.addInt(CRC); + data.addInt(serverId); + data.addLong(playerId); return data; } diff --git a/src/network/packets/swg/login/creation/DeleteCharacterResponse.java b/src/network/packets/swg/login/creation/DeleteCharacterResponse.java index 92d6a3d6d..55b9d0107 100644 --- a/src/network/packets/swg/login/creation/DeleteCharacterResponse.java +++ b/src/network/packets/swg/login/creation/DeleteCharacterResponse.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,17 +45,17 @@ public class DeleteCharacterResponse extends SWGPacket { this.deleted = deleted; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - deleted = getInt(data) == 0; + deleted = data.getInt() == 0; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt( data, CRC); - addInt( data, deleted ? 0 : 1); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(deleted ? 0 : 1); return data; } } diff --git a/src/network/packets/swg/login/creation/RandomNameRequest.java b/src/network/packets/swg/login/creation/RandomNameRequest.java index 76f4d88da..9d3b98995 100644 --- a/src/network/packets/swg/login/creation/RandomNameRequest.java +++ b/src/network/packets/swg/login/creation/RandomNameRequest.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -41,17 +41,17 @@ public class RandomNameRequest extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - raceCrc = getAscii(data); + raceCrc = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8 + raceCrc.length()); - addShort(data, 2); - addInt( data, CRC); - addAscii(data, raceCrc); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + raceCrc.length()); + data.addShort(2); + data.addInt(CRC); + data.addAscii(raceCrc); return data; } diff --git a/src/network/packets/swg/login/creation/RandomNameResponse.java b/src/network/packets/swg/login/creation/RandomNameResponse.java index dffa34480..ddf3a85a3 100644 --- a/src/network/packets/swg/login/creation/RandomNameResponse.java +++ b/src/network/packets/swg/login/creation/RandomNameResponse.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.login.creation; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -48,26 +48,26 @@ public class RandomNameResponse extends SWGPacket { this.randomName = randomName; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - race = getAscii(data); - randomName = getUnicode(data); - getAscii(data); - getInt(data); - getAscii(data); + race = data.getAscii(); + randomName = data.getUnicode(); + data.getAscii(); + data.getInt(); + data.getAscii(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 35 + race.length() + randomName.length() * 2; - ByteBuffer data = ByteBuffer.allocate(length); - addShort( data, 4); - addInt( data, CRC); - addAscii( data, race); - addUnicode(data, randomName); - addAscii( data, "ui"); - addInt( data, 0); - addAscii( data, "name_approved"); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(4); + data.addInt(CRC); + data.addAscii(race); + data.addUnicode(randomName); + data.addAscii("ui"); + data.addInt(0); + data.addAscii("name_approved"); return data; } diff --git a/src/network/packets/swg/zone/ClientOpenContainerMessage.java b/src/network/packets/swg/zone/ClientOpenContainerMessage.java index d9e50e365..f773a3203 100644 --- a/src/network/packets/swg/zone/ClientOpenContainerMessage.java +++ b/src/network/packets/swg/zone/ClientOpenContainerMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -46,23 +46,23 @@ public class ClientOpenContainerMessage extends SWGPacket { this.slot = slot; } - public ClientOpenContainerMessage(ByteBuffer data) { + public ClientOpenContainerMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - containerId = getLong(data); - slot = getAscii(data); + containerId = data.getLong(); + slot = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(20 + slot.length()); - addShort(data, 2); - addInt (data, CRC); - addLong (data, containerId); - addAscii(data, slot); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(20 + slot.length()); + data.addShort(2); + data.addInt(CRC); + data.addLong(containerId); + data.addAscii(slot); return data; } diff --git a/src/network/packets/swg/zone/CmdSceneReady.java b/src/network/packets/swg/zone/CmdSceneReady.java index 9fe0e2a76..96359ee75 100644 --- a/src/network/packets/swg/zone/CmdSceneReady.java +++ b/src/network/packets/swg/zone/CmdSceneReady.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,16 +38,16 @@ public class CmdSceneReady extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 6; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 1); - addInt( data, CRC); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(1); + data.addInt(CRC); return data; } } diff --git a/src/network/packets/swg/zone/ConnectPlayerResponseMessage.java b/src/network/packets/swg/zone/ConnectPlayerResponseMessage.java index fc9c00ae4..7098ee740 100644 --- a/src/network/packets/swg/zone/ConnectPlayerResponseMessage.java +++ b/src/network/packets/swg/zone/ConnectPlayerResponseMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,21 +38,21 @@ public class ConnectPlayerResponseMessage extends SWGPacket { } - public ConnectPlayerResponseMessage(ByteBuffer data) { + public ConnectPlayerResponseMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - getInt(data); + data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt (data, CRC); - addInt (data, 0); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(0); return data; } diff --git a/src/network/packets/swg/zone/EnterTicketPurchaseModeMessage.java b/src/network/packets/swg/zone/EnterTicketPurchaseModeMessage.java index e8298c697..748f3ba3c 100644 --- a/src/network/packets/swg/zone/EnterTicketPurchaseModeMessage.java +++ b/src/network/packets/swg/zone/EnterTicketPurchaseModeMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -48,21 +48,21 @@ public class EnterTicketPurchaseModeMessage extends SWGPacket { this.instant = instant; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - planetName = getAscii(data); - nearestPointName = getAscii(data); - instant = getBoolean(data); + planetName = data.getAscii(); + nearestPointName = data.getAscii(); + instant = data.getBoolean(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(11 + planetName.length() + nearestPointName.length()); // 2x ascii length shorts, 1x opcount short, 1x boolean, int CRC = 11 - addShort(data, 3); // Operand count of 3 - addInt(data, CRC); - addAscii(data, planetName); - addAscii(data, nearestPointName); - addBoolean(data, instant); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(11 + planetName.length() + nearestPointName.length()); // 2x ascii length shorts, 1x opcount short, 1x boolean, int CRC = 11 + data.addShort(3); // Operand count of 3 + data.addInt(CRC); + data.addAscii(planetName); + data.addAscii(nearestPointName); + data.addBoolean(instant); return data; } diff --git a/src/network/packets/swg/zone/ExpertiseRequestMessage.java b/src/network/packets/swg/zone/ExpertiseRequestMessage.java index 591a31b64..c0ed7b900 100644 --- a/src/network/packets/swg/zone/ExpertiseRequestMessage.java +++ b/src/network/packets/swg/zone/ExpertiseRequestMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -42,40 +42,40 @@ public final class ExpertiseRequestMessage extends SWGPacket { } - public ExpertiseRequestMessage(ByteBuffer data) { + public ExpertiseRequestMessage(NetBuffer data) { decode(data); } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - requestedSkills = new String[getInt(data)]; + requestedSkills = new String[data.getInt()]; for (int i = 0; i < requestedSkills.length; i++) { - requestedSkills[i] = getAscii(data); + requestedSkills[i] = data.getAscii(); } - clearAllExpertisesFirst = getBoolean(data); + clearAllExpertisesFirst = data.getBoolean(); } @Override - public ByteBuffer encode() { + public NetBuffer encode() { int skillNamesLength = 0; for (String skillName : requestedSkills) skillNamesLength += 2 + skillName.length(); - ByteBuffer data = ByteBuffer.allocate(11 + skillNamesLength); - addShort(data, 3); - addInt(data, CRC); - addInt(data, requestedSkills.length); + NetBuffer data = NetBuffer.allocate(11 + skillNamesLength); + data.addShort(3); + data.addInt(CRC); + data.addInt(requestedSkills.length); for (String requestedSkill : requestedSkills) { - addAscii(data, requestedSkill); + data.addAscii(requestedSkill); } - addBoolean(data, clearAllExpertisesFirst); + data.addBoolean(clearAllExpertisesFirst); return data; } diff --git a/src/network/packets/swg/zone/GalaxyLoopTimesResponse.java b/src/network/packets/swg/zone/GalaxyLoopTimesResponse.java index e987e1665..4c88c0bd3 100644 --- a/src/network/packets/swg/zone/GalaxyLoopTimesResponse.java +++ b/src/network/packets/swg/zone/GalaxyLoopTimesResponse.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,18 +44,18 @@ public class GalaxyLoopTimesResponse extends SWGPacket { this.time = time; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - time = getLong(data); + time = data.getLong(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 14; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 3); - addInt( data, CRC); - addLong( data, time); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(3); + data.addInt(CRC); + data.addLong(time); return data; } } diff --git a/src/network/packets/swg/zone/GameServerLagResponse.java b/src/network/packets/swg/zone/GameServerLagResponse.java index 0e868daab..68571e40b 100644 --- a/src/network/packets/swg/zone/GameServerLagResponse.java +++ b/src/network/packets/swg/zone/GameServerLagResponse.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,15 +40,15 @@ public class GameServerLagResponse extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 1); - addInt( data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(1); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/HeartBeat.java b/src/network/packets/swg/zone/HeartBeat.java index e3a65a964..e2ba4ff4b 100644 --- a/src/network/packets/swg/zone/HeartBeat.java +++ b/src/network/packets/swg/zone/HeartBeat.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,14 +38,17 @@ public class HeartBeat extends SWGPacket { } - public void decode(ByteBuffer data) { - super.decode(data, CRC); + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 1); - addInt( data, CRC); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(1); + data.addInt(CRC); return data; } } diff --git a/src/network/packets/swg/zone/LagRequest.java b/src/network/packets/swg/zone/LagRequest.java index 7aee46e5b..370a4e891 100644 --- a/src/network/packets/swg/zone/LagRequest.java +++ b/src/network/packets/swg/zone/LagRequest.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,15 +40,15 @@ public class LagRequest extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt( data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/ObjectMenuSelect.java b/src/network/packets/swg/zone/ObjectMenuSelect.java index fbeb655d2..762966051 100644 --- a/src/network/packets/swg/zone/ObjectMenuSelect.java +++ b/src/network/packets/swg/zone/ObjectMenuSelect.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -48,20 +48,20 @@ public class ObjectMenuSelect extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - selection = getShort(data); + objectId = data.getLong(); + selection = data.getShort(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(16); - addShort(data, 3); - addInt(data, CRC); - addLong(data, objectId); - addShort(data, selection); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16); + data.addShort(3); + data.addInt(CRC); + data.addLong(objectId); + data.addShort(selection); return data; } diff --git a/src/network/packets/swg/zone/ParametersMessage.java b/src/network/packets/swg/zone/ParametersMessage.java index 835a70382..8fccfb68b 100644 --- a/src/network/packets/swg/zone/ParametersMessage.java +++ b/src/network/packets/swg/zone/ParametersMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,17 +40,17 @@ public class ParametersMessage extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - weatherInterval = getInt(data); + weatherInterval = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt( data, CRC); - addInt( data, weatherInterval); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(weatherInterval); return data; } } diff --git a/src/network/packets/swg/zone/PlanetTravelPointListRequest.java b/src/network/packets/swg/zone/PlanetTravelPointListRequest.java index 67ec32ffa..5f8d615b7 100644 --- a/src/network/packets/swg/zone/PlanetTravelPointListRequest.java +++ b/src/network/packets/swg/zone/PlanetTravelPointListRequest.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -39,20 +39,20 @@ public class PlanetTravelPointListRequest extends SWGPacket { private String planetName; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - requesterObjId = getLong(data); - planetName = getAscii(data); + requesterObjId = data.getLong(); + planetName = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(16 + planetName.length()); // ascii length short + opcount short + long + int = 16 - addShort(data, 3); // Operand count of 3 - addInt(data, CRC); - addLong(data, requesterObjId); - addAscii(data, planetName); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + planetName.length()); // ascii length short + opcount short + long + int = 16 + data.addShort(3); // Operand count of 3 + data.addInt(CRC); + data.addLong(requesterObjId); + data.addAscii(planetName); return data; } diff --git a/src/network/packets/swg/zone/PlanetTravelPointListResponse.java b/src/network/packets/swg/zone/PlanetTravelPointListResponse.java index d87974b2e..18c7af032 100644 --- a/src/network/packets/swg/zone/PlanetTravelPointListResponse.java +++ b/src/network/packets/swg/zone/PlanetTravelPointListResponse.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -36,12 +35,13 @@ import com.projectswg.common.data.location.Location; import com.projectswg.common.data.location.Point3D; import com.projectswg.common.data.location.Terrain; import com.projectswg.common.encoding.StringType; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.TravelPoint; public class PlanetTravelPointListResponse extends SWGPacket { - + public static final int CRC = getCrc("PlanetTravelPointListResponse"); private Collection travelPoints; @@ -59,51 +59,52 @@ public class PlanetTravelPointListResponse extends SWGPacket { } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(calculateSize()); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(calculateSize()); - addShort(data, 6); // Operand count - addInt(data, CRC); // CRC - addAscii(data, planetName); // ASCII planet name + data.addShort(6); // Operand count + data.addInt(CRC); // CRC + data.addAscii(planetName); // ASCII planet name - addInt(data, travelPoints.size()); // List size - for(TravelPoint tp : travelPoints) // Point names - addAscii(data, tp.getName()); + data.addInt(travelPoints.size()); // List size + for (TravelPoint tp : travelPoints) // Point names + data.addAscii(tp.getName()); - addInt(data, travelPoints.size()); // List size - for(TravelPoint tp : travelPoints) { // Point coordinates - addFloat(data, (float) tp.getLocation().getX()); - addFloat(data, (float) tp.getLocation().getY()); - addFloat(data, (float) tp.getLocation().getZ()); + data.addInt(travelPoints.size()); // List size + for (TravelPoint tp : travelPoints) { // Point coordinates + data.addFloat((float) tp.getLocation().getX()); + data.addFloat((float) tp.getLocation().getY()); + data.addFloat((float) tp.getLocation().getZ()); } - addInt(data, additionalCosts.size()); // List size - for(int additionalCost : additionalCosts) { // additional costs - addInt(data, additionalCost <= 0 ? additionalCost + 50 : additionalCost / 2); + data.addInt(additionalCosts.size()); // List size + for (int additionalCost : additionalCosts) { // additional costs + data.addInt(additionalCost <= 0 ? additionalCost + 50 : additionalCost / 2); } - addInt(data, travelPoints.size()); // List size - for(TravelPoint tp : travelPoints) { // reachable - addBoolean(data, tp.isReachable()); + data.addInt(travelPoints.size()); // List size + for (TravelPoint tp : travelPoints) { // reachable + data.addBoolean(tp.isReachable()); } return data; } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - planetName = getAscii(data); - List pointNames = getList(data, StringType.ASCII); - List points = getList(data, Point3D.class); - int[] additionalCosts = getIntArray(data); - boolean[] pointsReachable = getBooleanArray(data); + planetName = data.getAscii(); + List pointNames = data.getList(StringType.ASCII); + List points = data.getList(Point3D.class); + int[] additionalCosts = data.getIntArray(); + boolean[] pointsReachable = data.getBooleanArray(); - for(int additionalCost : additionalCosts) + for (int additionalCost : additionalCosts) { this.additionalCosts.add(additionalCost * 2); + } - for(int i = 0; i < pointNames.size(); i++) { + for (int i = 0; i < pointNames.size(); i++) { String pointName = pointNames.get(i); Point3D point = points.get(i); boolean reachable = pointsReachable[i]; @@ -117,16 +118,15 @@ public class PlanetTravelPointListResponse extends SWGPacket { } private int calculateSize() { - int size = - Integer.BYTES * 5 + // CRC, 4x travelpoint list size + int size = Integer.BYTES * 5 + // CRC, 4x travelpoint list size Short.BYTES * 2 + // operand count + ascii string for planet name travelPoints.size() * (3 * Float.BYTES) + // all the floats travelPoints.size() * Integer.BYTES + // prices travelPoints.size() * Byte.BYTES; // the "reachable" booleans - for(TravelPoint tp : travelPoints) + for (TravelPoint tp : travelPoints) size += tp.getName().length() + Short.BYTES; // length of each actual name + a short to indicate name length - + size += planetName.length(); return size; diff --git a/src/network/packets/swg/zone/PlayClientEffectObjectMessage.java b/src/network/packets/swg/zone/PlayClientEffectObjectMessage.java index da2e6ee97..454b505fd 100644 --- a/src/network/packets/swg/zone/PlayClientEffectObjectMessage.java +++ b/src/network/packets/swg/zone/PlayClientEffectObjectMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,22 +45,23 @@ public class PlayClientEffectObjectMessage extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - super.decode(data, CRC); - effectFile = getAscii(data); - effectLocation = getAscii(data); - objectId = getLong(data); + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; + effectFile = data.getAscii(); + effectLocation = data.getAscii(); + objectId = data.getLong(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(20 + effectFile.length() + effectLocation.length()); - addShort(data, 3); - addInt( data, CRC); - addAscii(data, effectFile); - addAscii(data, effectLocation); - addLong(data, objectId); - addAscii(data, ""); // TODO not sure what this is + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(20 + effectFile.length() + effectLocation.length()); + data.addShort(3); + data.addInt(CRC); + data.addAscii(effectFile); + data.addAscii(effectLocation); + data.addLong(objectId); + data.addAscii(""); // TODO not sure what this is return data; } } diff --git a/src/network/packets/swg/zone/PlayMusicMessage.java b/src/network/packets/swg/zone/PlayMusicMessage.java index d5e019f42..b67d678a9 100644 --- a/src/network/packets/swg/zone/PlayMusicMessage.java +++ b/src/network/packets/swg/zone/PlayMusicMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -55,23 +55,24 @@ public class PlayMusicMessage extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - super.decode(data, CRC); - soundFile = getAscii(data); - objectId = getLong(data); - repititions = getInt(data); - loop = getBoolean(data); + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; + soundFile = data.getAscii(); + objectId = data.getLong(); + repititions = data.getInt(); + loop = data.getBoolean(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(21 + soundFile.length()); - addShort(data, 5); - addInt( data, CRC); - addAscii(data, soundFile); - addLong(data, objectId); - addInt(data, repititions); - addBoolean(data, loop); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(21 + soundFile.length()); + data.addShort(5); + data.addInt(CRC); + data.addAscii(soundFile); + data.addLong(objectId); + data.addInt(repititions); + data.addBoolean(loop); return data; } } diff --git a/src/network/packets/swg/zone/RequestGalaxyLoopTimes.java b/src/network/packets/swg/zone/RequestGalaxyLoopTimes.java index 1c5ad51ef..27c3ed45e 100644 --- a/src/network/packets/swg/zone/RequestGalaxyLoopTimes.java +++ b/src/network/packets/swg/zone/RequestGalaxyLoopTimes.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,15 +38,18 @@ public class RequestGalaxyLoopTimes extends SWGPacket { } - public void decode(ByteBuffer data) { - super.decode(data, CRC); + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; } - public ByteBuffer encode() { + @Override + public NetBuffer encode() { int length = 6; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 1); - addInt( data, CRC); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(1); + data.addInt(CRC); return data; } } diff --git a/src/network/packets/swg/zone/SceneCreateObjectByCrc.java b/src/network/packets/swg/zone/SceneCreateObjectByCrc.java index a0fd48b56..da872ef6f 100644 --- a/src/network/packets/swg/zone/SceneCreateObjectByCrc.java +++ b/src/network/packets/swg/zone/SceneCreateObjectByCrc.java @@ -27,9 +27,8 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Location; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -52,23 +51,23 @@ public class SceneCreateObjectByCrc extends SWGPacket { this.hyperspace = hyperspace; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); - l = getEncodable(data, Location.class); - objCrc = getInt(data); - hyperspace = getBoolean(data); + objId = data.getLong(); + l = data.getEncodable(Location.class); + objCrc = data.getInt(); + hyperspace = data.getBoolean(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(47); - addShort(data, 5); - addInt( data, CRC); - addLong( data, objId); - addEncodable(data, l); - addInt( data, objCrc); - addBoolean(data, hyperspace); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(47); + data.addShort(5); + data.addInt(CRC); + data.addLong(objId); + data.addEncodable(l); + data.addInt(objCrc); + data.addBoolean(hyperspace); return data; } diff --git a/src/network/packets/swg/zone/SceneDestroyObject.java b/src/network/packets/swg/zone/SceneDestroyObject.java index 797d6791c..99950c991 100644 --- a/src/network/packets/swg/zone/SceneDestroyObject.java +++ b/src/network/packets/swg/zone/SceneDestroyObject.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,23 +44,23 @@ public class SceneDestroyObject extends SWGPacket { this.objId = objId; } - public SceneDestroyObject(ByteBuffer data) { + public SceneDestroyObject(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); - getByte(data); + objId = data.getLong(); + data.getByte(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(15); - addShort(data, 3); - addInt (data, CRC); - addLong (data, objId); - addByte (data, 0); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(15); + data.addShort(3); + data.addInt(CRC); + data.addLong(objId); + data.addByte(0); return data; } diff --git a/src/network/packets/swg/zone/SceneEndBaselines.java b/src/network/packets/swg/zone/SceneEndBaselines.java index ccda0bb69..5840766e4 100644 --- a/src/network/packets/swg/zone/SceneEndBaselines.java +++ b/src/network/packets/swg/zone/SceneEndBaselines.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,18 +44,18 @@ public class SceneEndBaselines extends SWGPacket { this.objId = objId; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); + objId = data.getLong(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 14; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 2); - addInt( data, CRC); - addLong( data, objId); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addLong(objId); return data; } diff --git a/src/network/packets/swg/zone/ServerNowEpochTime.java b/src/network/packets/swg/zone/ServerNowEpochTime.java index 0a3c1f508..84cca4df0 100644 --- a/src/network/packets/swg/zone/ServerNowEpochTime.java +++ b/src/network/packets/swg/zone/ServerNowEpochTime.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,17 +44,17 @@ public class ServerNowEpochTime extends SWGPacket { this.time = time; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - time = getInt(data); + time = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt (data, CRC); - addInt (data, time); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(time); return data; } diff --git a/src/network/packets/swg/zone/ServerTimeMessage.java b/src/network/packets/swg/zone/ServerTimeMessage.java index f8f73a24d..c5c0e1841 100644 --- a/src/network/packets/swg/zone/ServerTimeMessage.java +++ b/src/network/packets/swg/zone/ServerTimeMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,17 +44,17 @@ public class ServerTimeMessage extends SWGPacket { this.time = time; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - time = getLong(data); + time = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 2); - addInt( data, CRC); - addLong( data, time); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(2); + data.addInt(CRC); + data.addLong(time); return data; } diff --git a/src/network/packets/swg/zone/ServerWeatherMessage.java b/src/network/packets/swg/zone/ServerWeatherMessage.java index b8eeaddf8..7664b0078 100644 --- a/src/network/packets/swg/zone/ServerWeatherMessage.java +++ b/src/network/packets/swg/zone/ServerWeatherMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.WeatherType; @@ -41,11 +41,11 @@ public class ServerWeatherMessage extends SWGPacket { private float cloudVectorY; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - switch (getInt(data)) { + switch (data.getInt()) { case 0: default: type = WeatherType.CLEAR; @@ -61,22 +61,22 @@ public class ServerWeatherMessage extends SWGPacket { break; } - cloudVectorX = getFloat(data); - cloudVectorZ = getFloat(data); - cloudVectorY = getFloat(data); + cloudVectorX = data.getFloat(); + cloudVectorZ = data.getFloat(); + cloudVectorY = data.getFloat(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(22); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(22); - addShort(data, 3); - addInt(data, CRC); - addInt(data, type.getValue()); + data.addShort(3); + data.addInt(CRC); + data.addInt(type.getValue()); - addFloat(data, cloudVectorX); - addFloat(data, cloudVectorZ); - addFloat(data, cloudVectorY); + data.addFloat(cloudVectorX); + data.addFloat(cloudVectorZ); + data.addFloat(cloudVectorY); return data; } diff --git a/src/network/packets/swg/zone/SetWaypointColor.java b/src/network/packets/swg/zone/SetWaypointColor.java index 188deac19..364debe3a 100644 --- a/src/network/packets/swg/zone/SetWaypointColor.java +++ b/src/network/packets/swg/zone/SetWaypointColor.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,21 +40,21 @@ public class SetWaypointColor extends SWGPacket { public SetWaypointColor() { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); - color = getAscii(data); + objId = data.getLong(); + color = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(16 + color.length()); - addShort(data, 3); - addInt(data, CRC); - addLong(data, objId); - addAscii(data, color); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + color.length()); + data.addShort(3); + data.addInt(CRC); + data.addLong(objId); + data.addAscii(color); return data; } diff --git a/src/network/packets/swg/zone/ShowBackpack.java b/src/network/packets/swg/zone/ShowBackpack.java index bc710e577..8022fc97e 100644 --- a/src/network/packets/swg/zone/ShowBackpack.java +++ b/src/network/packets/swg/zone/ShowBackpack.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,21 +38,21 @@ public class ShowBackpack extends SWGPacket { private boolean showBackpack; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - showBackpack = getBoolean(data); + objectId = data.getLong(); + showBackpack = data.getBoolean(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(15); - addShort(data, 3); - addInt(data, CRC); - addLong(data, objectId); - addBoolean(data, showBackpack); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(15); + data.addShort(3); + data.addInt(CRC); + data.addLong(objectId); + data.addBoolean(showBackpack); return data; } diff --git a/src/network/packets/swg/zone/ShowHelmet.java b/src/network/packets/swg/zone/ShowHelmet.java index e50b79cdc..a402cb78e 100644 --- a/src/network/packets/swg/zone/ShowHelmet.java +++ b/src/network/packets/swg/zone/ShowHelmet.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,21 +38,21 @@ public class ShowHelmet extends SWGPacket { private boolean showHelmet; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - showHelmet = getBoolean(data); + objectId = data.getLong(); + showHelmet = data.getBoolean(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(15); - addShort(data, 3); - addInt(data, CRC); - addLong(data, objectId); - addBoolean(data, showHelmet); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(15); + data.addShort(3); + data.addInt(CRC); + data.addLong(objectId); + data.addBoolean(showHelmet); return data; } diff --git a/src/network/packets/swg/zone/StopClientEffectObjectByLabelMessage.java b/src/network/packets/swg/zone/StopClientEffectObjectByLabelMessage.java index d72d1ba10..fe3fc38c5 100644 --- a/src/network/packets/swg/zone/StopClientEffectObjectByLabelMessage.java +++ b/src/network/packets/swg/zone/StopClientEffectObjectByLabelMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -48,27 +48,27 @@ public class StopClientEffectObjectByLabelMessage extends SWGPacket { this.softStop = softStop; } - public StopClientEffectObjectByLabelMessage(ByteBuffer data) { + public StopClientEffectObjectByLabelMessage(NetBuffer data) { decode(data); } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - label = getAscii(data); - softStop = getBoolean(data); + objectId = data.getLong(); + label = data.getAscii(); + softStop = data.getBoolean(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(Short.BYTES * 2 + Integer.BYTES + Long.BYTES + Byte.BYTES + label.length()); - addShort(data, 4); - addInt (data, CRC); - addLong (data, objectId); - addAscii(data, label); - addBoolean(data, softStop); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(Short.BYTES * 2 + Integer.BYTES + Long.BYTES + Byte.BYTES + label.length()); + data.addShort(4); + data.addInt(CRC); + data.addLong(objectId); + data.addAscii(label); + data.addBoolean(softStop); return data; } diff --git a/src/network/packets/swg/zone/UpdateContainmentMessage.java b/src/network/packets/swg/zone/UpdateContainmentMessage.java index 840416065..c0d6b76ed 100644 --- a/src/network/packets/swg/zone/UpdateContainmentMessage.java +++ b/src/network/packets/swg/zone/UpdateContainmentMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -48,21 +48,21 @@ public class UpdateContainmentMessage extends SWGPacket { this.slotIndex = slotIndex; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - containerId = getLong(data); - slotIndex = getInt(data); + objectId = data.getLong(); + containerId = data.getLong(); + slotIndex = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(26); - addShort(data, 4); - addInt( data, CRC); - addLong( data, objectId); - addLong( data, containerId); - addInt( data, slotIndex); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(26); + data.addShort(4); + data.addInt(CRC); + data.addLong(objectId); + data.addLong(containerId); + data.addInt(slotIndex); return data; } diff --git a/src/network/packets/swg/zone/UpdatePostureMessage.java b/src/network/packets/swg/zone/UpdatePostureMessage.java index 689687099..136aba0cd 100644 --- a/src/network/packets/swg/zone/UpdatePostureMessage.java +++ b/src/network/packets/swg/zone/UpdatePostureMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.Posture; @@ -52,20 +52,20 @@ public class UpdatePostureMessage extends SWGPacket { this.objId = objId; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - posture = getByte(data); - objId = getLong(data); + posture = data.getByte(); + objId = data.getLong(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 16; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 3); - addInt (data, CRC); - addByte (data, posture); - addLong (data, objId); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(3); + data.addInt(CRC); + data.addByte(posture); + data.addLong(objId); return data; } diff --git a/src/network/packets/swg/zone/UpdatePvpStatusMessage.java b/src/network/packets/swg/zone/UpdatePvpStatusMessage.java index 07536dac4..e44ee0ae9 100644 --- a/src/network/packets/swg/zone/UpdatePvpStatusMessage.java +++ b/src/network/packets/swg/zone/UpdatePvpStatusMessage.java @@ -27,9 +27,10 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; import java.util.EnumSet; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; import resources.PvpFaction; import resources.PvpFlag; @@ -53,29 +54,29 @@ public class UpdatePvpStatusMessage extends SWGPacket { this.objId = objId; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - EnumSet enumFlags = PvpFlag.getFlags(getInt(data)); + EnumSet enumFlags = PvpFlag.getFlags(data.getInt()); pvpFlags = enumFlags.toArray(new PvpFlag[enumFlags.size()]); - pvpFaction = PvpFaction.getFactionForCrc(getInt(data)); - objId = getLong(data); + pvpFaction = PvpFaction.getFactionForCrc(data.getInt()); + objId = data.getLong(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 22; int flagBitmask = 0; - ByteBuffer data = ByteBuffer.allocate(length); + NetBuffer data = NetBuffer.allocate(length); for(PvpFlag pvpFlag : pvpFlags) flagBitmask |= pvpFlag.getBitmask(); - addShort(data, 4); - addInt( data, CRC); - addInt( data, flagBitmask); - addInt( data, pvpFaction.getCrc()); - addLong( data, objId); + data.addShort(4); + data.addInt(CRC); + data.addInt(flagBitmask); + data.addInt(pvpFaction.getCrc()); + data.addLong(objId); return data; } diff --git a/src/network/packets/swg/zone/UpdateTransformMessage.java b/src/network/packets/swg/zone/UpdateTransformMessage.java index d8a63e78d..ad036197f 100644 --- a/src/network/packets/swg/zone/UpdateTransformMessage.java +++ b/src/network/packets/swg/zone/UpdateTransformMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -54,37 +54,37 @@ public class UpdateTransformMessage extends SWGPacket { this.speed = 0; } - public UpdateTransformMessage(ByteBuffer data) { + public UpdateTransformMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); - posX = getShort(data); - posY = getShort(data); - posZ = getShort(data); - updateCounter = getInt(data); - speed = getByte(data); - direction = getByte(data); - lookAtYaw = getByte(data); - useLookAtYaw = getBoolean(data); + objId = data.getLong(); + posX = data.getShort(); + posY = data.getShort(); + posZ = data.getShort(); + updateCounter = data.getInt(); + speed = data.getByte(); + direction = data.getByte(); + lookAtYaw = data.getByte(); + useLookAtYaw = data.getBoolean(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(28); - addShort(data, 10); - addInt( data, CRC); - addLong( data, objId); - addShort(data, posX); - addShort(data, posY); - addShort(data, posZ); - addInt (data, updateCounter); - addByte (data, (byte) speed); - addByte (data, direction); - addByte (data, lookAtYaw); // lookAtYaw - addBoolean (data, useLookAtYaw); // useLookAtYaw + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(28); + data.addShort(10); + data.addInt(CRC); + data.addLong(objId); + data.addShort(posX); + data.addShort(posY); + data.addShort(posZ); + data.addInt(updateCounter); + data.addByte((byte) speed); + data.addByte(direction); + data.addByte(lookAtYaw); // lookAtYaw + data.addBoolean(useLookAtYaw); // useLookAtYaw return data; } diff --git a/src/network/packets/swg/zone/UpdateTransformWithParentMessage.java b/src/network/packets/swg/zone/UpdateTransformWithParentMessage.java index 7c9327de6..d6f37bf2a 100644 --- a/src/network/packets/swg/zone/UpdateTransformWithParentMessage.java +++ b/src/network/packets/swg/zone/UpdateTransformWithParentMessage.java @@ -27,9 +27,8 @@ package network.packets.swg.zone; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Location; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -71,37 +70,37 @@ public class UpdateTransformWithParentMessage extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - cellId = getLong(data); - objectId = getLong(data); - x = getShort(data); - y = getShort(data); - z = getShort(data); - updateCounter = getInt(data); - speed = getByte(data); - direction = getByte(data); - lookDirection = getByte(data); - useLookDirection= getBoolean(data); + cellId = data.getLong(); + objectId = data.getLong(); + x = data.getShort(); + y = data.getShort(); + z = data.getShort(); + updateCounter = data.getInt(); + speed = data.getByte(); + direction = data.getByte(); + lookDirection = data.getByte(); + useLookDirection= data.getBoolean(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(36); - addShort(bb, 11); - addInt(bb, CRC); - addLong(bb, cellId); - addLong(bb, objectId); - addShort(bb, x); - addShort(bb, y); - addShort(bb, z); - addInt(bb, updateCounter); - addByte(bb, speed); - addByte(bb, direction); - addByte(bb, lookDirection); - addBoolean(bb, useLookDirection); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(36); + data.addShort(11); + data.addInt(CRC); + data.addLong(cellId); + data.addLong(objectId); + data.addShort(x); + data.addShort(y); + data.addShort(z); + data.addInt(updateCounter); + data.addByte(speed); + data.addByte(direction); + data.addByte(lookDirection); + data.addBoolean(useLookDirection); + return data; } public void setCellId(long cellId) { diff --git a/src/network/packets/swg/zone/auction/AuctionQueryHeadersMessage.java b/src/network/packets/swg/zone/auction/AuctionQueryHeadersMessage.java index 5dcf4fcb1..27b428e0a 100644 --- a/src/network/packets/swg/zone/auction/AuctionQueryHeadersMessage.java +++ b/src/network/packets/swg/zone/auction/AuctionQueryHeadersMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,19 +43,19 @@ public class AuctionQueryHeadersMessage extends SWGPacket { } - public AuctionQueryHeadersMessage(ByteBuffer data) { + public AuctionQueryHeadersMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/auction/AuctionQueryHeadersResponseMessage.java b/src/network/packets/swg/zone/auction/AuctionQueryHeadersResponseMessage.java index 919d504f8..b8054449e 100644 --- a/src/network/packets/swg/zone/auction/AuctionQueryHeadersResponseMessage.java +++ b/src/network/packets/swg/zone/auction/AuctionQueryHeadersResponseMessage.java @@ -27,12 +27,13 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; public class AuctionQueryHeadersResponseMessage extends SWGPacket { @@ -47,106 +48,108 @@ public class AuctionQueryHeadersResponseMessage extends SWGPacket { items = new ArrayList(); } - public AuctionQueryHeadersResponseMessage(ByteBuffer data) { + public AuctionQueryHeadersResponseMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - counter = getInt(data); - screen = getInt(data); - String [] locations = new String[getInt(data)]; + counter = data.getInt(); + screen = data.getInt(); + String [] locations = new String[data.getInt()]; for (int i = 0; i < locations.length; i++) - locations[i] = getAscii(data); - int itemCount = getInt(data); + locations[i] = data.getAscii(); + int itemCount = data.getInt(); AuctionItem [] items = new AuctionItem[itemCount]; for (int itemI = 0; itemI < itemCount; itemI++) { AuctionItem item = new AuctionItem(); - item.setItemName(getUnicode(data)); + item.setItemName(data.getUnicode()); items[itemI] = item; } - itemCount = getInt(data); + itemCount = data.getInt(); if (itemCount != items.length) throw new IllegalStateException("I WAS LIED TO!"); for (int itemI = 0; itemI < itemCount; itemI++) { AuctionItem item = items[itemI]; - item.setObjectId(getLong(data)); - getByte(data); - item.setPrice(getInt(data)); - item.setExpireTime(getInt(data)*1000L+System.currentTimeMillis()); - if (getInt(data) != item.getPrice()) + item.setObjectId(data.getLong()); + data.getByte(); + item.setPrice(data.getInt()); + item.setExpireTime(data.getInt()*1000L+System.currentTimeMillis()); + if (data.getInt() != item.getPrice()) throw new IllegalStateException("I WAS LIED TO AT INDEX " + itemI); - item.setVuid(locations[getShort(data)]); - item.setOwnerId(getLong(data)); - item.setOwnerName(locations[getShort(data)]); - getLong(data); - getInt(data); - getInt(data); - getShort(data); - item.setItemType(getInt(data)); - getInt(data); - item.setAuctionOptions(getInt(data)); - getInt(data); + item.setVuid(locations[data.getShort()]); + item.setOwnerId(data.getLong()); + item.setOwnerName(locations[data.getShort()]); + data.getLong(); + data.getInt(); + data.getInt(); + data.getShort(); + item.setItemType(data.getInt()); + data.getInt(); + item.setAuctionOptions(data.getInt()); + data.getInt(); } - getShort(data); - getByte(data); + data.getShort(); + data.getByte(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 8); - addInt (data, CRC); - addInt (data, counter); - addInt (data, screen); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(8); + data.addInt(CRC); + data.addInt(counter); + data.addInt(screen); Set locations = new LinkedHashSet(); for (AuctionItem item : items) { locations.add(item.getVuid()); locations.add(item.getOwnerName()); } - addInt(data, items.size()); + data.addInt(items.size()); for (String item : locations) { - addAscii(data, item); + data.addAscii(item); } - addInt (data, items.size()); + data.addInt(items.size()); for (AuctionItem item : items) - addUnicode(data, item.getItemName()); + data.addUnicode(item.getItemName()); - addInt (data, items.size()); + data.addInt(items.size()); int i = 0; for(AuctionItem item : items) { - addLong(data, item.getObjectId()); - addByte(data, i); - addInt(data, item.getPrice()); - addInt(data, (int) ((item.getExpireTime() - System.currentTimeMillis()) / 1000)); - addInt(data, item.getPrice()); // if != price then auction instead of instant sale - //addInt(data, 0); - addShort(data, getString(locations, item.getVuid())); - addLong(data, item.getOwnerId()); - addShort(data, getString(locations, item.getOwnerName())); - addLong(data, 0); - addInt(data, 0); // unk seen as 2 mostly, doesnt seem to have any effect - addInt(data, 0); - addShort(data, (short) 0); - addInt(data, item.getItemType()); // gameObjectType/category bitmask + data.addLong(item.getObjectId()); + data.addByte(i); + data.addInt(item.getPrice()); + data.addInt((int) ((item.getExpireTime() - System.currentTimeMillis()) / 1000)); + data.addInt(item.getPrice()); // if != price then auction instead of instant sale + //data.addInt(0); + data.addShort(getString(locations, item.getVuid())); + data.addLong(item.getOwnerId()); + data.addShort(getString(locations, item.getOwnerName())); + data.addLong(0); + data.addInt(0); // unk seen as 2 mostly, doesnt seem to have any effect + data.addInt(0); + data.addShort((short) 0); + data.addInt(item.getItemType()); // gameObjectType/category bitmask - addInt(data, 0); + data.addInt(0); int options = 0; if (item.getStatus() == AuctionState.OFFERED || item.getStatus() == AuctionState.FORSALE) options |= 0x800; - addInt(data, item.getAuctionOptions() | options); - addInt(data, 0); + data.addInt(item.getAuctionOptions() | options); + data.addInt(0); i++; } - addShort(data, 0); + data.addShort(0); - addByte(data, (byte) 0); + data.addByte((byte) 0); return data; } diff --git a/src/network/packets/swg/zone/auction/CancelLiveAuctionMessage.java b/src/network/packets/swg/zone/auction/CancelLiveAuctionMessage.java index fa1cd9e1e..88d528ca6 100644 --- a/src/network/packets/swg/zone/auction/CancelLiveAuctionMessage.java +++ b/src/network/packets/swg/zone/auction/CancelLiveAuctionMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,19 +43,19 @@ public class CancelLiveAuctionMessage extends SWGPacket { } - public CancelLiveAuctionMessage(ByteBuffer data) { + public CancelLiveAuctionMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/auction/CancelLiveAuctionResponseMessage.java b/src/network/packets/swg/zone/auction/CancelLiveAuctionResponseMessage.java index 11ea6c33d..d76665491 100644 --- a/src/network/packets/swg/zone/auction/CancelLiveAuctionResponseMessage.java +++ b/src/network/packets/swg/zone/auction/CancelLiveAuctionResponseMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,19 +43,19 @@ public class CancelLiveAuctionResponseMessage extends SWGPacket { } - public CancelLiveAuctionResponseMessage(ByteBuffer data) { + public CancelLiveAuctionResponseMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/auction/GetAuctionDetails.java b/src/network/packets/swg/zone/auction/GetAuctionDetails.java index 28b65adaa..50b839fdb 100644 --- a/src/network/packets/swg/zone/auction/GetAuctionDetails.java +++ b/src/network/packets/swg/zone/auction/GetAuctionDetails.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,21 +45,21 @@ public class GetAuctionDetails extends SWGPacket { this.auctionId = auctionId; } - public GetAuctionDetails(ByteBuffer data) { + public GetAuctionDetails(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - auctionId = getLong(data); + auctionId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 2); - addInt (data, CRC); - addLong (data, auctionId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(2); + data.addInt(CRC); + data.addLong(auctionId); return data; } diff --git a/src/network/packets/swg/zone/auction/GetAuctionDetailsResponse.java b/src/network/packets/swg/zone/auction/GetAuctionDetailsResponse.java index ae9bf8e39..5d305db53 100644 --- a/src/network/packets/swg/zone/auction/GetAuctionDetailsResponse.java +++ b/src/network/packets/swg/zone/auction/GetAuctionDetailsResponse.java @@ -27,11 +27,12 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; public class GetAuctionDetailsResponse extends SWGPacket { @@ -52,40 +53,40 @@ public class GetAuctionDetailsResponse extends SWGPacket { this.itemName = itemName; } - public GetAuctionDetailsResponse(ByteBuffer data) { + public GetAuctionDetailsResponse(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - itemId = getLong(data); - getInt(data); - int count = getInt(data); + itemId = data.getLong(); + data.getInt(); + int count = data.getInt(); for (int i = 0; i < count; i++) { - String key = getAscii(data); - String val = getUnicode(data); + String key = data.getAscii(); + String val = data.getUnicode(); properties.put(key, val); } - itemName = getAscii(data); - getShort(data); // 0 + itemName = data.getAscii(); + data.getShort(); // 0 } - public ByteBuffer encode() { + public NetBuffer encode() { int strSize = 0; for (Entry e : properties.entrySet()) strSize += 6 + e.getKey().length() + e.getValue().length()*2; - ByteBuffer data = ByteBuffer.allocate(18 + strSize); - addShort(data, 9); - addInt (data, CRC); - addLong (data, itemId); - addInt (data, properties.size()); + NetBuffer data = NetBuffer.allocate(18 + strSize); + data.addShort(9); + data.addInt(CRC); + data.addLong(itemId); + data.addInt(properties.size()); for (Entry e : properties.entrySet()) { - addAscii(data, e.getKey()); - addUnicode(data, e.getValue()); + data.addAscii(e.getKey()); + data.addUnicode(e.getValue()); } - addAscii(data, itemName); - addShort(data, 0); + data.addAscii(itemName); + data.addShort(0); return data; } diff --git a/src/network/packets/swg/zone/auction/IsVendorOwnerResponseMessage.java b/src/network/packets/swg/zone/auction/IsVendorOwnerResponseMessage.java index eb611ca41..48d1d2fb4 100644 --- a/src/network/packets/swg/zone/auction/IsVendorOwnerResponseMessage.java +++ b/src/network/packets/swg/zone/auction/IsVendorOwnerResponseMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,19 +43,19 @@ public class IsVendorOwnerResponseMessage extends SWGPacket { } - public IsVendorOwnerResponseMessage(ByteBuffer data) { + public IsVendorOwnerResponseMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/auction/RetrieveAuctionItemMessage.java b/src/network/packets/swg/zone/auction/RetrieveAuctionItemMessage.java index 010909c51..5affeea10 100644 --- a/src/network/packets/swg/zone/auction/RetrieveAuctionItemMessage.java +++ b/src/network/packets/swg/zone/auction/RetrieveAuctionItemMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,19 +43,19 @@ public class RetrieveAuctionItemMessage extends SWGPacket { } - public RetrieveAuctionItemMessage(ByteBuffer data) { + public RetrieveAuctionItemMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/auction/RetrieveAuctionItemResponseMessage.java b/src/network/packets/swg/zone/auction/RetrieveAuctionItemResponseMessage.java index 984dc9603..e659736b4 100644 --- a/src/network/packets/swg/zone/auction/RetrieveAuctionItemResponseMessage.java +++ b/src/network/packets/swg/zone/auction/RetrieveAuctionItemResponseMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.auction; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,19 +43,19 @@ public class RetrieveAuctionItemResponseMessage extends SWGPacket { } - public RetrieveAuctionItemResponseMessage(ByteBuffer data) { + public RetrieveAuctionItemResponseMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/baselines/Baseline.java b/src/network/packets/swg/zone/baselines/Baseline.java index 2cee302b5..6b9f2a327 100644 --- a/src/network/packets/swg/zone/baselines/Baseline.java +++ b/src/network/packets/swg/zone/baselines/Baseline.java @@ -27,8 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.baselines; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -52,36 +51,33 @@ public class Baseline extends SWGPacket { baseData = subData.encodeBaseline().array(); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); - byte [] str = new byte[4]; data.get(str); - String strType = new StringBuffer(new String(str, ascii)).reverse().toString(); - for (BaselineType baseType : BaselineType.values()) - if (baseType.toString().equals(strType)) - type = baseType; - num = getByte(data); - baseData = new byte[getInt(data)]; - data.get(baseData); + objId = data.getLong(); + type = BaselineType.valueOf(new StringBuffer(new String(data.getArray(4), ascii)).reverse().toString()); + num = data.getByte(); + baseData = data.getArrayLarge(); if (baseData.length >= 2) - opCount = ByteBuffer.wrap(baseData).order(ByteOrder.LITTLE_ENDIAN).getShort(0); + opCount = NetBuffer.wrap(baseData).getShort(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(25 + baseData.length); - addShort(data, 5); - addInt( data, CRC); - addLong( data, objId); - data.put(new StringBuffer(type.toString()).reverse().toString().getBytes(ascii)); - addByte( data, num); - addInt( data, baseData.length + 2); - addShort( data, (opCount == 0 ? 5 : opCount)); - data.put(baseData); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(25 + baseData.length); + data.addShort(5); + data.addInt(CRC); + data.addLong(objId); + data.addRawArray(new StringBuffer(type.toString()).reverse().toString().getBytes(ascii)); + data.addByte(num); + data.addInt(baseData.length + 2); + data.addShort((opCount == 0 ? 5 : opCount)); + data.addRawArray(baseData); return data; } - public ByteBuffer encodeBaseline() { return ByteBuffer.allocate(0); } + public NetBuffer encodeBaseline() { return NetBuffer.allocate(0); } public long getObjectId() { return objId; } diff --git a/src/network/packets/swg/zone/building/UpdateCellPermissionMessage.java b/src/network/packets/swg/zone/building/UpdateCellPermissionMessage.java index f7062be08..32da108dd 100644 --- a/src/network/packets/swg/zone/building/UpdateCellPermissionMessage.java +++ b/src/network/packets/swg/zone/building/UpdateCellPermissionMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.building; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -47,23 +47,23 @@ public class UpdateCellPermissionMessage extends SWGPacket { this.cellId = cellId; } - public UpdateCellPermissionMessage(ByteBuffer data) { + public UpdateCellPermissionMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - permissionFlag = getByte(data); - cellId = getLong(data); + permissionFlag = data.getByte(); + cellId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(15); - addShort(data, 2); - addInt( data, CRC); - addByte( data, permissionFlag); - addLong( data, cellId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(15); + data.addShort(2); + data.addInt(CRC); + data.addByte(permissionFlag); + data.addLong(cellId); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatAddModeratorToRoom.java b/src/network/packets/swg/zone/chat/ChatAddModeratorToRoom.java index 5bfb5530f..c4a52dbda 100644 --- a/src/network/packets/swg/zone/chat/ChatAddModeratorToRoom.java +++ b/src/network/packets/swg/zone/chat/ChatAddModeratorToRoom.java @@ -24,53 +24,51 @@ * You should have received a copy of the GNU Affero General Public License * along with Holocore. If not, see ******************************************************************************/ - package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; -/** - * @author Waverunner - */ public class ChatAddModeratorToRoom extends SWGPacket { + public static final int CRC = getCrc("ChatAddModeratorToRoom"); - + private ChatAvatar avatar; private String room; private int sequence; - + @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); + sequence = data.getInt(); } - + @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + room.length() + avatar.encode().length); - addShort(bb, 4); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + room.length() + avatar.encode().length); + data.addShort(4); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + data.addInt(sequence); + return data; } - + public ChatAvatar getAvatar() { return avatar; } - + public String getRoom() { return room; } - + public int getSequence() { return sequence; } + } diff --git a/src/network/packets/swg/zone/chat/ChatBanAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatBanAvatarFromRoom.java index d12651a77..1e834bdce 100644 --- a/src/network/packets/swg/zone/chat/ChatBanAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatBanAvatarFromRoom.java @@ -27,51 +27,51 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; -/** - * @author Waverunner - */ public class ChatBanAvatarFromRoom extends SWGPacket { + public static final int CRC = getCrc("ChatBanAvatarFromRoom"); - + private ChatAvatar avatar; private String room; private int sequence; - - public ChatBanAvatarFromRoom() {} - + + public ChatBanAvatarFromRoom() { + + } + @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); + sequence = data.getInt(); } - + @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + avatar.encode().length + room.length()); - addShort(bb, 4); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + avatar.encode().length + room.length()); + data.addShort(4); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + data.addInt(sequence); + return data; } - + public ChatAvatar getAvatar() { return avatar; } - + public String getRoom() { return room; } - + public int getSequence() { return sequence; } diff --git a/src/network/packets/swg/zone/chat/ChatCreateRoom.java b/src/network/packets/swg/zone/chat/ChatCreateRoom.java index 3d9070a44..2aa5677a1 100644 --- a/src/network/packets/swg/zone/chat/ChatCreateRoom.java +++ b/src/network/packets/swg/zone/chat/ChatCreateRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -47,29 +47,29 @@ public class ChatCreateRoom extends SWGPacket { public ChatCreateRoom() {} @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - isPublic = getBoolean(data); - isModerated = getBoolean(data); - owner = getAscii(data); - roomName = getAscii(data); - roomTitle = getAscii(data); - sequence = getInt(data); + isPublic = data.getBoolean(); + isModerated = data.getBoolean(); + owner = data.getAscii(); + roomName = data.getAscii(); + roomTitle = data.getAscii(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(18 + owner.length() + roomName.length() + roomTitle.length()); - addShort(bb, 7); - addInt(bb, CRC); - addBoolean(bb, isPublic); - addBoolean(bb, isModerated); - addAscii(bb, owner); - addAscii(bb, roomName); - addAscii(bb, roomTitle); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(18 + owner.length() + roomName.length() + roomTitle.length()); + data.addShort(7); + data.addInt(CRC); + data.addBoolean(isPublic); + data.addBoolean(isModerated); + data.addAscii(owner); + data.addAscii(roomName); + data.addAscii(roomTitle); + data.addInt(sequence); + return data; } public boolean isPublic() { diff --git a/src/network/packets/swg/zone/chat/ChatDeletePersistentMessage.java b/src/network/packets/swg/zone/chat/ChatDeletePersistentMessage.java index 9e01f3d83..ed535cf32 100644 --- a/src/network/packets/swg/zone/chat/ChatDeletePersistentMessage.java +++ b/src/network/packets/swg/zone/chat/ChatDeletePersistentMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -37,20 +37,20 @@ public class ChatDeletePersistentMessage extends SWGPacket { private int mailId; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - mailId = getInt(data); + mailId = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(10); - addShort(bb, 2); - addInt(bb, CRC); - addInt(bb, mailId); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(mailId); + return data; } public int getMailId() { return mailId; } diff --git a/src/network/packets/swg/zone/chat/ChatDestroyRoom.java b/src/network/packets/swg/zone/chat/ChatDestroyRoom.java index 49e4dab7d..75b9922d3 100644 --- a/src/network/packets/swg/zone/chat/ChatDestroyRoom.java +++ b/src/network/packets/swg/zone/chat/ChatDestroyRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -43,21 +43,21 @@ public class ChatDestroyRoom extends SWGPacket { public ChatDestroyRoom() {} @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - roomId = getInt(data); - sequence = getInt(data); + roomId = data.getInt(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(14); - addShort(bb, 3); - addInt(bb, CRC); - addInt(bb, roomId); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(3); + data.addInt(CRC); + data.addInt(roomId); + data.addInt(sequence); + return data; } public int getRoomId() { diff --git a/src/network/packets/swg/zone/chat/ChatEnterRoomById.java b/src/network/packets/swg/zone/chat/ChatEnterRoomById.java index 67fbfd33f..aafaf8de5 100644 --- a/src/network/packets/swg/zone/chat/ChatEnterRoomById.java +++ b/src/network/packets/swg/zone/chat/ChatEnterRoomById.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -42,23 +42,23 @@ public class ChatEnterRoomById extends SWGPacket { private String roomPath; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - sequence = getInt(data); - roomId = getInt(data); - roomPath = getAscii(data); + sequence = data.getInt(); + roomId = data.getInt(); + roomPath = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(10 + roomPath.length()); - addShort(bb, 4); - addInt(bb, sequence); - addInt(bb, roomId); - addAscii(bb, roomPath); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10 + roomPath.length()); + data.addShort(4); + data.addInt(sequence); + data.addInt(roomId); + data.addAscii(roomPath); + return data; } public int getSequence() { diff --git a/src/network/packets/swg/zone/chat/ChatFriendsListUpdate.java b/src/network/packets/swg/zone/chat/ChatFriendsListUpdate.java index a9e82867c..aff465bda 100644 --- a/src/network/packets/swg/zone/chat/ChatFriendsListUpdate.java +++ b/src/network/packets/swg/zone/chat/ChatFriendsListUpdate.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -45,23 +45,23 @@ public class ChatFriendsListUpdate extends SWGPacket { this.online = online; } - public ChatFriendsListUpdate(ByteBuffer data) { + public ChatFriendsListUpdate(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - friend = getEncodable(data, ChatAvatar.class); - online = getBoolean(data); + friend = data.getEncodable(ChatAvatar.class); + online = data.getBoolean(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(7 + friend.encode().length); - addShort (data, 3); - addInt (data, CRC); - addEncodable(data, friend); - addBoolean(data, online); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(7 + friend.encode().length); + data.addShort(3); + data.addInt(CRC); + data.addEncodable(friend); + data.addBoolean(online); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatIgnoreList.java b/src/network/packets/swg/zone/chat/ChatIgnoreList.java index 0dbbb8e66..9f769f2ff 100644 --- a/src/network/packets/swg/zone/chat/ChatIgnoreList.java +++ b/src/network/packets/swg/zone/chat/ChatIgnoreList.java @@ -27,10 +27,11 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; public class ChatIgnoreList extends SWGPacket { @@ -45,7 +46,7 @@ public class ChatIgnoreList extends SWGPacket { ignoreList = new ArrayList(); } - public ChatIgnoreList(ByteBuffer data) { + public ChatIgnoreList(NetBuffer data) { decode(data); } @@ -57,32 +58,32 @@ public class ChatIgnoreList extends SWGPacket { ignoreList.add(name); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - int listCount = getInt(data); + objectId = data.getLong(); + int listCount = data.getInt(); for (int i = 0; i < listCount; i++) { - String game = getAscii(data); - String galaxy = getAscii(data); - String name = getAscii(data); + String game = data.getAscii(); + String galaxy = data.getAscii(); + String name = data.getAscii(); addName(game, galaxy, name); } } - public ByteBuffer encode() { + public NetBuffer encode() { int extraSize = 0; for (IgnoreListItem item : ignoreList) extraSize += 6 + item.getGame().length() + item.getGalaxy().length() + item.getName().length(); - ByteBuffer data = ByteBuffer.allocate(18 + extraSize); - addShort (data, 3); - addInt (data, CRC); - addLong (data, objectId); - addInt (data, ignoreList.size()); + NetBuffer data = NetBuffer.allocate(18 + extraSize); + data.addShort(3); + data.addInt(CRC); + data.addLong(objectId); + data.addInt(ignoreList.size()); for (IgnoreListItem item : ignoreList) { - addAscii(data, item.getGame()); - addAscii(data, item.getGalaxy()); - addAscii(data, item.getName()); + data.addAscii(item.getGame()); + data.addAscii(item.getGalaxy()); + data.addAscii(item.getName()); } return data; } diff --git a/src/network/packets/swg/zone/chat/ChatInstantMessageToCharacter.java b/src/network/packets/swg/zone/chat/ChatInstantMessageToCharacter.java index 59367a8e4..3e60f37b5 100644 --- a/src/network/packets/swg/zone/chat/ChatInstantMessageToCharacter.java +++ b/src/network/packets/swg/zone/chat/ChatInstantMessageToCharacter.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -56,31 +56,31 @@ public class ChatInstantMessageToCharacter extends SWGPacket { this.sequence = sequence; } - public ChatInstantMessageToCharacter(ByteBuffer data) { + public ChatInstantMessageToCharacter(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - getAscii(data); - galaxy = getAscii(data); - character = getAscii(data); - message = getUnicode(data); - outOfBand = getUnicode(data); - sequence = getInt(data); + data.getAscii(); + galaxy = data.getAscii(); + character = data.getAscii(); + message = data.getUnicode(); + outOfBand = data.getUnicode(); + sequence = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(27 + galaxy.length() + character.length() + message.length()*2); - addShort(data, 2); - addInt( data, CRC); - addAscii(data, "SWG"); - addAscii(data, galaxy); - addAscii(data, character); - addUnicode(data, message); - addUnicode(data, outOfBand); - addInt (data, sequence); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(27 + galaxy.length() + character.length() + message.length()*2); + data.addShort(2); + data.addInt(CRC); + data.addAscii("SWG"); + data.addAscii(galaxy); + data.addAscii(character); + data.addUnicode(message); + data.addUnicode(outOfBand); + data.addInt(sequence); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatInstantMessageToClient.java b/src/network/packets/swg/zone/chat/ChatInstantMessageToClient.java index a5d731c9a..78d4fa6e8 100644 --- a/src/network/packets/swg/zone/chat/ChatInstantMessageToClient.java +++ b/src/network/packets/swg/zone/chat/ChatInstantMessageToClient.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -54,29 +54,29 @@ public class ChatInstantMessageToClient extends SWGPacket { this.outOfBand = outOfBand; } - public ChatInstantMessageToClient(ByteBuffer data) { + public ChatInstantMessageToClient(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - getAscii(data); // "SWG" - galaxy = getAscii(data); - character = getAscii(data); - message = getUnicode(data); - outOfBand = getUnicode(data); + data.getAscii(); // "SWG" + galaxy = data.getAscii(); + character = data.getAscii(); + message = data.getUnicode(); + outOfBand = data.getUnicode(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(23 + galaxy.length() + character.length() + message.length()*2 + outOfBand.length()*2); - addShort(data, 2); - addInt( data, CRC); - addAscii(data, "SWG"); - addAscii(data, galaxy); - addAscii(data, character); - addUnicode(data, message); - addUnicode(data, outOfBand); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(23 + galaxy.length() + character.length() + message.length()*2 + outOfBand.length()*2); + data.addShort(2); + data.addInt(CRC); + data.addAscii("SWG"); + data.addAscii(galaxy); + data.addAscii(character); + data.addUnicode(message); + data.addUnicode(outOfBand); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatInviteAvatarToRoom.java b/src/network/packets/swg/zone/chat/ChatInviteAvatarToRoom.java index cb60fb0aa..5de7f82cc 100644 --- a/src/network/packets/swg/zone/chat/ChatInviteAvatarToRoom.java +++ b/src/network/packets/swg/zone/chat/ChatInviteAvatarToRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -49,21 +49,21 @@ public class ChatInviteAvatarToRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); } - + @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(8 + avatar.getSize() + room.length()); - addShort(bb, 3); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + avatar.getLength() + room.length()); + data.addShort(3); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + return data; } public ChatAvatar getAvatar() { diff --git a/src/network/packets/swg/zone/chat/ChatKickAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatKickAvatarFromRoom.java index fe7beb5dd..db09dfe24 100644 --- a/src/network/packets/swg/zone/chat/ChatKickAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatKickAvatarFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -44,21 +44,21 @@ public class ChatKickAvatarFromRoom extends SWGPacket { public ChatKickAvatarFromRoom() {} @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(8 + avatar.encode().length); - addShort(bb, 3); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + avatar.encode().length); + data.addShort(3); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + return data; } public ChatAvatar getAvatar() { diff --git a/src/network/packets/swg/zone/chat/ChatOnAddModeratorToRoom.java b/src/network/packets/swg/zone/chat/ChatOnAddModeratorToRoom.java index 19782a81e..c9d0ebc2a 100644 --- a/src/network/packets/swg/zone/chat/ChatOnAddModeratorToRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnAddModeratorToRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -53,26 +53,26 @@ public class ChatOnAddModeratorToRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - target = getEncodable(data, ChatAvatar.class); - moderator = getEncodable(data, ChatAvatar.class); - result = getInt(data); - room = getAscii(data); - sequence = getInt(data); + target = data.getEncodable(ChatAvatar.class); + moderator = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + room = data.getAscii(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length()); - addShort(bb, 1); - addInt(bb, CRC); - addEncodable(bb, target); - addEncodable(bb, moderator); - addInt(bb, result); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length()); + data.addShort(1); + data.addInt(CRC); + data.addEncodable(target); + data.addEncodable(moderator); + data.addInt(result); + data.addAscii(room); + data.addInt(sequence); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnBanAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatOnBanAvatarFromRoom.java index db1145434..9c21ae7f6 100644 --- a/src/network/packets/swg/zone/chat/ChatOnBanAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnBanAvatarFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -53,26 +53,26 @@ public class ChatOnBanAvatarFromRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - room = getAscii(data); - moderator = getEncodable(data, ChatAvatar.class); - target = getEncodable(data, ChatAvatar.class); - result = getInt(data); - sequence = getInt(data); + room = data.getAscii(); + moderator = data.getEncodable(ChatAvatar.class); + target = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(16 + moderator.encode().length + target.encode().length + room.length()); - addShort(bb, 6); - addInt(bb, CRC); - addAscii(bb, room); - addEncodable(bb, moderator); - addEncodable(bb, target); - addInt(bb, result); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + moderator.encode().length + target.encode().length + room.length()); + data.addShort(6); + data.addInt(CRC); + data.addAscii(room); + data.addEncodable(moderator); + data.addEncodable(target); + data.addInt(result); + data.addInt(sequence); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnChangeFriendStatus.java b/src/network/packets/swg/zone/chat/ChatOnChangeFriendStatus.java deleted file mode 100644 index 699e36345..000000000 --- a/src/network/packets/swg/zone/chat/ChatOnChangeFriendStatus.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 /// Project SWG /// www.projectswg.com - * - * ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on - * July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. - * Our goal is to create an emulator which will provide a server for players to - * continue playing a game similar to the one they used to play. We are basing - * it on the final publish of the game prior to end-game events. - * - * This file is part of Holocore. - * - * -------------------------------------------------------------------------------- - * - * Holocore is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * Holocore is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Holocore. If not, see - ******************************************************************************/ - -package network.packets.swg.zone.chat; - -import java.nio.ByteBuffer; - -import network.packets.swg.SWGPacket; - -/** - * @author Waverunner - */ -public class ChatOnChangeFriendStatus extends SWGPacket { - public static final int CRC = 0x54336726; - - private String galaxy; - private String friendName; - private boolean remove; - private long playerID; - - public ChatOnChangeFriendStatus(long playerID, String galaxy, String friendName, boolean remove) { - this.playerID = playerID; - this.galaxy = galaxy; - this.friendName = friendName; - this.remove = remove; - } - - @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(32 + galaxy.length() + friendName.length()); - addShort(bb, ((short) 0x06)); - addInt(bb, CRC); - addLong(bb, playerID); - addAscii(bb, "SWG"); - addAscii(bb, galaxy); - addAscii(bb, friendName); - addInt(bb, 0); - addInt(bb, (remove ? 1 : 0)); - addByte(bb, 0); - return bb; - } -} diff --git a/src/network/packets/swg/zone/chat/ChatOnConnectAvatar.java b/src/network/packets/swg/zone/chat/ChatOnConnectAvatar.java index 8570ce7b9..855e015ba 100644 --- a/src/network/packets/swg/zone/chat/ChatOnConnectAvatar.java +++ b/src/network/packets/swg/zone/chat/ChatOnConnectAvatar.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -42,18 +42,21 @@ public class ChatOnConnectAvatar extends SWGPacket { } - public ChatOnConnectAvatar(ByteBuffer data) { + public ChatOnConnectAvatar(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - super.decode(data, CRC); + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(6); - addShort(data, 2); - addInt (data, CRC); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(2); + data.addInt(CRC); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatOnCreateRoom.java b/src/network/packets/swg/zone/chat/ChatOnCreateRoom.java index 80e0dd3d8..2886e945c 100644 --- a/src/network/packets/swg/zone/chat/ChatOnCreateRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnCreateRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatRoom; @@ -51,22 +51,22 @@ public class ChatOnCreateRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - result = getInt(data); - room = getEncodable(data, ChatRoom.class); - sequence = getInt(data); + result = data.getInt(); + room = data.getEncodable(ChatRoom.class); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(14 + room.encode().length); - addShort(bb, 1); - addInt(bb, CRC); - addInt(bb, result); - addEncodable(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14 + room.encode().length); + data.addShort(1); + data.addInt(CRC); + data.addInt(result); + data.addEncodable(room); + data.addInt(sequence); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnDestroyRoom.java b/src/network/packets/swg/zone/chat/ChatOnDestroyRoom.java index 51c0539c0..197a6931b 100644 --- a/src/network/packets/swg/zone/chat/ChatOnDestroyRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnDestroyRoom.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -51,27 +51,29 @@ public class ChatOnDestroyRoom extends SWGPacket { this.sequence = sequence; } - public ChatOnDestroyRoom(ByteBuffer data) { + public ChatOnDestroyRoom(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - owner = getEncodable(data, ChatAvatar.class); - result = getInt(data); - roomId = getInt(data); - sequence = getInt(data); + owner = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + roomId = data.getInt(); + sequence = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(18 + owner.encode().length); - addShort(data, 5); - addInt (data, CRC); - data.put(owner.encode()); - addInt (data, result); - addInt (data, roomId); - addInt (data, sequence); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(18 + owner.getLength()); + data.addShort(5); + data.addInt(CRC); + data.addEncodable(owner); + data.addInt(result); + data.addInt(roomId); + data.addInt(sequence); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatOnEnteredRoom.java b/src/network/packets/swg/zone/chat/ChatOnEnteredRoom.java index bfaf892fc..e0696b420 100644 --- a/src/network/packets/swg/zone/chat/ChatOnEnteredRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnEnteredRoom.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -53,27 +53,27 @@ public class ChatOnEnteredRoom extends SWGPacket { this.sequence = sequence; } - public ChatOnEnteredRoom(ByteBuffer data) { + public ChatOnEnteredRoom(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - result = ChatResult.fromInteger(getInt(data)); - chatRoomId = getInt(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + result = ChatResult.fromInteger(data.getInt()); + chatRoomId = data.getInt(); + sequence = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(avatar.getSize() + 18); - addShort(data, 5); - addInt(data, CRC); - addEncodable(data, avatar); - addInt(data, result.getCode()); - addInt(data, chatRoomId); - addInt(data, sequence); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(avatar.getLength() + 18); + data.addShort(5); + data.addInt(CRC); + data.addEncodable(avatar); + data.addInt(result.getCode()); + data.addInt(chatRoomId); + data.addInt(sequence); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatOnInviteToRoom.java b/src/network/packets/swg/zone/chat/ChatOnInviteToRoom.java index a9100b9f0..a63aec0bd 100644 --- a/src/network/packets/swg/zone/chat/ChatOnInviteToRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnInviteToRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -53,24 +53,24 @@ public class ChatOnInviteToRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - room = getAscii(data); - sender = getEncodable(data, ChatAvatar.class); - invited = getEncodable(data, ChatAvatar.class); - result = getInt(data); + room = data.getAscii(); + sender = data.getEncodable(ChatAvatar.class); + invited = data.getEncodable(ChatAvatar.class); + result = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + sender.getSize() + invited.getSize() + room.length()); - addShort(bb, 5); - addInt(bb, CRC); - addAscii(bb, room); - addEncodable(bb, sender); - addEncodable(bb, invited); - addInt(bb, result); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + sender.getLength() + invited.getLength() + room.length()); + data.addShort(5); + data.addInt(CRC); + data.addAscii(room); + data.addEncodable(sender); + data.addEncodable(invited); + data.addInt(result); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnKickAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatOnKickAvatarFromRoom.java index dbb56f108..7b8c16633 100644 --- a/src/network/packets/swg/zone/chat/ChatOnKickAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnKickAvatarFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -51,24 +51,24 @@ public class ChatOnKickAvatarFromRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - target = getEncodable(data, ChatAvatar.class); - moderator = getEncodable(data, ChatAvatar.class); - result = getInt(data); - room = getAscii(data); + target = data.getEncodable(ChatAvatar.class); + moderator = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + room = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length()); - addShort(bb, 6); - addInt(bb, CRC); - addEncodable(bb, target); - addEncodable(bb, moderator); - addInt(bb, result); - addAscii(bb, room); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length()); + data.addShort(6); + data.addInt(CRC); + data.addEncodable(target); + data.addEncodable(moderator); + data.addInt(result); + data.addAscii(room); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnLeaveRoom.java b/src/network/packets/swg/zone/chat/ChatOnLeaveRoom.java index 72966c4bd..80cfc17f8 100644 --- a/src/network/packets/swg/zone/chat/ChatOnLeaveRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnLeaveRoom.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -51,27 +51,27 @@ public class ChatOnLeaveRoom extends SWGPacket { this.sequence = sequence; } - public ChatOnLeaveRoom(ByteBuffer data) { + public ChatOnLeaveRoom(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - result = getInt(data); - chatRoomId = getInt(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + chatRoomId = data.getInt(); + sequence = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(18 + avatar.getSize()); - addShort(data, 5); - addInt( data, CRC); - addEncodable(data, avatar); - addInt(data, result); - addInt (data, chatRoomId); - addInt (data, sequence); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(18 + avatar.getLength()); + data.addShort(5); + data.addInt(CRC); + data.addEncodable(avatar); + data.addInt(result); + data.addInt(chatRoomId); + data.addInt(sequence); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatOnReceiveRoomInvitation.java b/src/network/packets/swg/zone/chat/ChatOnReceiveRoomInvitation.java index e1617910c..cc659693d 100644 --- a/src/network/packets/swg/zone/chat/ChatOnReceiveRoomInvitation.java +++ b/src/network/packets/swg/zone/chat/ChatOnReceiveRoomInvitation.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -45,19 +45,19 @@ public class ChatOnReceiveRoomInvitation extends SWGPacket { this.room = room; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8 + avatar.getSize() + room.length()); - addShort(data, 3); - addInt(data, CRC); - addEncodable(data, avatar); - addAscii(data, room); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + avatar.getLength() + room.length()); + data.addShort(3); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnRemoveModeratorFromRoom.java b/src/network/packets/swg/zone/chat/ChatOnRemoveModeratorFromRoom.java index fae5ea51d..cc3c2c6a5 100644 --- a/src/network/packets/swg/zone/chat/ChatOnRemoveModeratorFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnRemoveModeratorFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -53,26 +53,26 @@ public class ChatOnRemoveModeratorFromRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - target = getEncodable(data, ChatAvatar.class); - moderator = getEncodable(data, ChatAvatar.class); - result = getInt(data); - room = getAscii(data); - sequence = getInt(data); + target = data.getEncodable(ChatAvatar.class); + moderator = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + room = data.getAscii(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length()); - addShort(bb, 1); - addInt(bb, CRC); - addEncodable(bb, target); - addEncodable(bb, moderator); - addInt(bb, result); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + target.encode().length + moderator.encode().length + room.length()); + data.addShort(1); + data.addInt(CRC); + data.addEncodable(target); + data.addEncodable(moderator); + data.addInt(result); + data.addAscii(room); + data.addInt(sequence); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnSendInstantMessage.java b/src/network/packets/swg/zone/chat/ChatOnSendInstantMessage.java index d8ce80e6c..99e128ff8 100644 --- a/src/network/packets/swg/zone/chat/ChatOnSendInstantMessage.java +++ b/src/network/packets/swg/zone/chat/ChatOnSendInstantMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -46,23 +46,23 @@ public class ChatOnSendInstantMessage extends SWGPacket { this.sequence = sequence; } - public ChatOnSendInstantMessage(ByteBuffer data) { + public ChatOnSendInstantMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - result = getInt(data); - sequence = getInt(data); + result = data.getInt(); + sequence = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 2); - addInt (data, CRC); - addInt (data, result); - addInt (data, sequence); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(2); + data.addInt(CRC); + data.addInt(result); + data.addInt(sequence); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatOnSendPersistentMessage.java b/src/network/packets/swg/zone/chat/ChatOnSendPersistentMessage.java index 4087d579e..b0c42e093 100644 --- a/src/network/packets/swg/zone/chat/ChatOnSendPersistentMessage.java +++ b/src/network/packets/swg/zone/chat/ChatOnSendPersistentMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatResult; @@ -42,14 +42,22 @@ public class ChatOnSendPersistentMessage extends SWGPacket { this.result = result; this.count = count; } + + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; + result = ChatResult.fromInteger(data.getInt()); + count = data.getInt(); + } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 3); - addInt(data, CRC); - addInt(data, result.getCode()); - addInt(data, count); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(3); + data.addInt(CRC); + data.addInt(result.getCode()); + data.addInt(count); return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnSendRoomMessage.java b/src/network/packets/swg/zone/chat/ChatOnSendRoomMessage.java index 487650912..ce61ff6d4 100644 --- a/src/network/packets/swg/zone/chat/ChatOnSendRoomMessage.java +++ b/src/network/packets/swg/zone/chat/ChatOnSendRoomMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -42,19 +42,19 @@ public class ChatOnSendRoomMessage extends SWGPacket { this.sequence = sequence; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - result = getInt(data); - sequence = getInt(data); + result = data.getInt(); + sequence = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 3); - addInt( data, CRC); - addInt( data, result); - addInt( data, sequence); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(3); + data.addInt(CRC); + data.addInt(result); + data.addInt(sequence); return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnUnbanAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatOnUnbanAvatarFromRoom.java index 266b54042..ae19beb4b 100644 --- a/src/network/packets/swg/zone/chat/ChatOnUnbanAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnUnbanAvatarFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -53,26 +53,26 @@ public class ChatOnUnbanAvatarFromRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - room = getAscii(data); - moderator = getEncodable(data, ChatAvatar.class); - target = getEncodable(data, ChatAvatar.class); - result = getInt(data); - sequence = getInt(data); + room = data.getAscii(); + moderator = data.getEncodable(ChatAvatar.class); + target = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(16 + moderator.encode().length + target.encode().length + room.length()); - addShort(bb, 6); - addInt(bb, CRC); - addAscii(bb, room); - addEncodable(bb, moderator); - addEncodable(bb, target); - addInt(bb, result); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + moderator.encode().length + target.encode().length + room.length()); + data.addShort(6); + data.addInt(CRC); + data.addAscii(room); + data.addEncodable(moderator); + data.addEncodable(target); + data.addInt(result); + data.addInt(sequence); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatOnUninviteFromRoom.java b/src/network/packets/swg/zone/chat/ChatOnUninviteFromRoom.java index 6b9298dfa..f25e82641 100644 --- a/src/network/packets/swg/zone/chat/ChatOnUninviteFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatOnUninviteFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -55,27 +55,27 @@ public class ChatOnUninviteFromRoom extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - room = getAscii(data); - sender = getEncodable(data, ChatAvatar.class); - invitee = getEncodable(data, ChatAvatar.class); - result = getInt(data); - sequence = getInt(data); + room = data.getAscii(); + sender = data.getEncodable(ChatAvatar.class); + invitee = data.getEncodable(ChatAvatar.class); + result = data.getInt(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(16 + room.length() + sender.encode().length + invitee.encode().length); - addShort(bb, 6); - addInt(bb, CRC); - addAscii(bb, room); - addEncodable(bb, sender); - addEncodable(bb, invitee); - addInt(bb, result); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(16 + room.length() + sender.encode().length + invitee.encode().length); + data.addShort(6); + data.addInt(CRC); + data.addAscii(room); + data.addEncodable(sender); + data.addEncodable(invitee); + data.addInt(result); + data.addInt(sequence); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatPersistentMessageToClient.java b/src/network/packets/swg/zone/chat/ChatPersistentMessageToClient.java index 485315f5e..cbec08a13 100644 --- a/src/network/packets/swg/zone/chat/ChatPersistentMessageToClient.java +++ b/src/network/packets/swg/zone/chat/ChatPersistentMessageToClient.java @@ -27,48 +27,64 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.encodables.player.Mail; +import services.CoreManager; public class ChatPersistentMessageToClient extends SWGPacket { + public static final int CRC = getCrc("ChatPersistentMessageToClient"); private Mail mail; - private String galaxy; private boolean header; public ChatPersistentMessageToClient() { - this(null, "", false); + this(null, false); } - public ChatPersistentMessageToClient(Mail mail, String galaxy, boolean header) { + public ChatPersistentMessageToClient(Mail mail, boolean header) { this.mail = mail; - this.galaxy = galaxy; this.header = header; } - + @Override - public ByteBuffer encode() { - byte[] data = (header ? mail.encodeHeader() : mail.encode()); + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; + mail = new Mail(null, null, null, 0); + mail.setSender(data.getAscii()); + data.getAscii(); // SWG + data.getAscii(); // galaxy + mail.setId(data.getInt()); + header = data.getBoolean(); + if (header) + mail.decodeHeader(data); + else + mail.decode(data); + mail.setStatus(data.getByte()); + mail.setTimestamp(data.getInt()); + } + + @Override + public NetBuffer encode() { + byte[] mailData = (header ? mail.encodeHeader() : mail.encode()); + String galaxy = CoreManager.getGalaxy().getName(); - ByteBuffer bb = ByteBuffer.allocate(25 + galaxy.length() + data.length + (mail.getSender().length() * 2)).order(ByteOrder.LITTLE_ENDIAN); - addShort(bb, 2); - addInt(bb, CRC); + NetBuffer data = NetBuffer.allocate(25 + galaxy.length() + mailData.length + (mail.getSender().length() * 2)); + data.addShort(2); + data.addInt(CRC); - addAscii(bb, mail.getSender()); - addAscii(bb, "SWG"); - addAscii(bb, galaxy); - addInt(bb, mail.getId()); - addBoolean(bb, header); - - bb.put(data); - - addByte(bb, mail.getStatus()); - addInt(bb, mail.getTimestamp()); - return bb; + data.addAscii(mail.getSender()); + data.addAscii("SWG"); + data.addAscii(galaxy); + data.addInt(mail.getId()); + data.addBoolean(header); + data.addRawArray(mailData); + data.addByte(mail.getStatus()); + data.addInt(mail.getTimestamp()); + return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatPersistentMessageToServer.java b/src/network/packets/swg/zone/chat/ChatPersistentMessageToServer.java index 284c2aa4c..af22f111d 100644 --- a/src/network/packets/swg/zone/chat/ChatPersistentMessageToServer.java +++ b/src/network/packets/swg/zone/chat/ChatPersistentMessageToServer.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.encodables.OutOfBandPackage; @@ -51,30 +51,29 @@ public class ChatPersistentMessageToServer extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - message = getUnicode(data); - outOfBandPackage = getEncodable(data, OutOfBandPackage.class); - counter = getInt(data); - subject = getUnicode(data); - getAscii(data); // "SWG" - galaxy = getAscii(data); - recipient = getAscii(data); + message = data.getUnicode(); + outOfBandPackage = data.getEncodable(OutOfBandPackage.class); + counter = data.getInt(); + subject = data.getUnicode(); + data.getAscii(); // "SWG" + galaxy = data.getAscii(); + recipient = data.getAscii(); } @Override - public ByteBuffer encode() { - byte[] oob = outOfBandPackage.encode(); - int dataLength = 31 + message.length()*2+oob.length+subject.length()*2+galaxy.length()+recipient.length(); - ByteBuffer data = ByteBuffer.allocate(dataLength); - addUnicode(data, message); - addData(data, oob); - addInt(data, counter); - addUnicode(data, subject); - addAscii(data, "SWG"); - addAscii(data, galaxy); - addAscii(data, recipient); + public NetBuffer encode() { + int dataLength = 31 + message.length() * 2 + outOfBandPackage.getLength() + subject.length() * 2 + galaxy.length() + recipient.length(); + NetBuffer data = NetBuffer.allocate(dataLength); + data.addUnicode(message); + data.addEncodable(outOfBandPackage); + data.addInt(counter); + data.addUnicode(subject); + data.addAscii("SWG"); + data.addAscii(galaxy); + data.addAscii(recipient); return data; } diff --git a/src/network/packets/swg/zone/chat/ChatQueryRoom.java b/src/network/packets/swg/zone/chat/ChatQueryRoom.java index 67fa661ec..4e85f7f24 100644 --- a/src/network/packets/swg/zone/chat/ChatQueryRoom.java +++ b/src/network/packets/swg/zone/chat/ChatQueryRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -41,21 +41,21 @@ public class ChatQueryRoom extends SWGPacket { private String roomPath; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - sequence = getInt(data); - roomPath = getAscii(data); + sequence = data.getInt(); + roomPath = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + roomPath.length()); - addShort(bb, 3); - addInt(bb, CRC); - addInt(bb, sequence); - addAscii(bb, roomPath); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + roomPath.length()); + data.addShort(3); + data.addInt(CRC); + data.addInt(sequence); + data.addAscii(roomPath); + return data; } public int getSequence() { diff --git a/src/network/packets/swg/zone/chat/ChatQueryRoomResults.java b/src/network/packets/swg/zone/chat/ChatQueryRoomResults.java index 052975722..603ba6a2b 100644 --- a/src/network/packets/swg/zone/chat/ChatQueryRoomResults.java +++ b/src/network/packets/swg/zone/chat/ChatQueryRoomResults.java @@ -24,58 +24,60 @@ * You should have received a copy of the GNU Affero General Public License * along with Holocore. If not, see ******************************************************************************/ - package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; -import java.util.List; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; import resources.chat.ChatRoom; -/** - * @author Waverunner - */ public class ChatQueryRoomResults extends SWGPacket { + public static final int CRC = getCrc("ChatQueryRoomResults"); - + private ChatRoom room; private int sequence; - + public ChatQueryRoomResults(ChatRoom room, int sequence) { this.room = room; this.sequence = sequence; } - + @Override - public void decode(ByteBuffer data) { - super.decode(data, CRC); + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; } - + @Override - public ByteBuffer encode() { - byte[] data = room.encode(); - int size = data.length; - - List members = room.getMembers(); - List invited = room.getInvited(); - List moderators = room.getModerators(); - List banned = room.getBanned(); - - for (ChatAvatar avatar : members) { size += avatar.getSize(); } - for (ChatAvatar avatar : invited) { size += avatar.getSize(); } - for (ChatAvatar avatar : moderators) { size += avatar.getSize(); } - for (ChatAvatar avatar : banned) { size += avatar.getSize(); } - - ByteBuffer bb = ByteBuffer.allocate(20 + size); - addList(bb, members); - addList(bb, invited); - addList(bb, moderators); - addList(bb, banned); - addInt(bb, sequence); - addData(bb, data); - - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(getLength()); + data.addList(room.getMembers()); + data.addList(room.getInvited()); + data.addList(room.getModerators()); + data.addList(room.getBanned()); + data.addInt(sequence); + data.addEncodable(room); + return data; + } + + private int getLength() { + int size = 20 + room.getLength(); + + for (ChatAvatar avatar : room.getMembers()) { + size += avatar.getLength(); + } + for (ChatAvatar avatar : room.getInvited()) { + size += avatar.getLength(); + } + for (ChatAvatar avatar : room.getModerators()) { + size += avatar.getLength(); + } + for (ChatAvatar avatar : room.getBanned()) { + size += avatar.getLength(); + } + + return size; } } diff --git a/src/network/packets/swg/zone/chat/ChatRemoveAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatRemoveAvatarFromRoom.java index 5346f9470..9626d2baa 100644 --- a/src/network/packets/swg/zone/chat/ChatRemoveAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatRemoveAvatarFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -42,22 +42,22 @@ public class ChatRemoveAvatarFromRoom extends SWGPacket { private String path; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - path = getAscii(data); + avatar = data.getEncodable(ChatAvatar.class); + path = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(6 + path.length() + avatar.getSize()); - addShort(bb, 3); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, path); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6 + path.length() + avatar.getLength()); + data.addShort(3); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(path); + return data; } public ChatAvatar getAvatar() { diff --git a/src/network/packets/swg/zone/chat/ChatRemoveModeratorFromRoom.java b/src/network/packets/swg/zone/chat/ChatRemoveModeratorFromRoom.java index e31ead1b1..d7433d999 100644 --- a/src/network/packets/swg/zone/chat/ChatRemoveModeratorFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatRemoveModeratorFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -43,23 +43,23 @@ public class ChatRemoveModeratorFromRoom extends SWGPacket { private int sequence; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + room.length() + avatar.encode().length); - addShort(bb, 4); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + room.length() + avatar.encode().length); + data.addShort(4); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + data.addInt(sequence); + return data; } public ChatAvatar getAvatar() { diff --git a/src/network/packets/swg/zone/chat/ChatRequestPersistentMessage.java b/src/network/packets/swg/zone/chat/ChatRequestPersistentMessage.java index d15aa68ba..336c3438a 100644 --- a/src/network/packets/swg/zone/chat/ChatRequestPersistentMessage.java +++ b/src/network/packets/swg/zone/chat/ChatRequestPersistentMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,22 +38,22 @@ public class ChatRequestPersistentMessage extends SWGPacket { private int mailId; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - sequence = getInt(data); - mailId = getInt(data); + sequence = data.getInt(); + mailId = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(14); - addShort(bb, 3); - addInt(bb, CRC); - addInt(bb, sequence); - addInt(bb, mailId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(3); + data.addInt(CRC); + data.addInt(sequence); + data.addInt(mailId); - return bb; + return data; } public int getMailId() { return this.mailId; } diff --git a/src/network/packets/swg/zone/chat/ChatRequestRoomList.java b/src/network/packets/swg/zone/chat/ChatRequestRoomList.java index fc280b707..1c54f8cba 100644 --- a/src/network/packets/swg/zone/chat/ChatRequestRoomList.java +++ b/src/network/packets/swg/zone/chat/ChatRequestRoomList.java @@ -27,24 +27,28 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; public class ChatRequestRoomList extends SWGPacket { + public static final int CRC = getCrc("ChatRequestRoomList"); - public ChatRequestRoomList() {} - - public void decode(ByteBuffer data) { - super.decode(data, CRC); + public ChatRequestRoomList() { } - public ByteBuffer encode() { - int length = 6; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 1); - addInt( data, CRC); + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) + return; + } + + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6); + data.addShort(1); + data.addInt(CRC); return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatRoomMessage.java b/src/network/packets/swg/zone/chat/ChatRoomMessage.java index 17b60fd18..357825940 100644 --- a/src/network/packets/swg/zone/chat/ChatRoomMessage.java +++ b/src/network/packets/swg/zone/chat/ChatRoomMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -48,25 +48,27 @@ public class ChatRoomMessage extends SWGPacket { this.outOfBandPackage = oob; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - roomId = getInt(data); - message = getUnicode(data); - outOfBandPackage = getEncodable(data, OutOfBandPackage.class); + avatar = data.getEncodable(ChatAvatar.class); + roomId = data.getInt(); + message = data.getUnicode(); + outOfBandPackage = data.getEncodable(OutOfBandPackage.class); } - public ByteBuffer encode() { + @Override + public NetBuffer encode() { byte[] oob = outOfBandPackage.encode(); - int length = 14 + avatar.encode().length + oob.length + message.length() * 2; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 5); - addInt(data, CRC); - addEncodable(data, avatar); - addInt(data, roomId); - addUnicode(data, message); - addData(data, oob); + int length = 14 + avatar.getLength() + oob.length + message.length() * 2; + NetBuffer data = NetBuffer.allocate(length); + data.addShort(5); + data.addInt(CRC); + data.addEncodable(avatar); + data.addInt(roomId); + data.addUnicode(message); + data.addRawArray(oob); return data; } } diff --git a/src/network/packets/swg/zone/chat/ChatSendToRoom.java b/src/network/packets/swg/zone/chat/ChatSendToRoom.java index 740945208..45b82149a 100644 --- a/src/network/packets/swg/zone/chat/ChatSendToRoom.java +++ b/src/network/packets/swg/zone/chat/ChatSendToRoom.java @@ -24,17 +24,13 @@ * You should have received a copy of the GNU Affero General Public License * along with Holocore. If not, see ******************************************************************************/ - package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.encodables.OutOfBandPackage; -/** - * @author Waverunner - */ public class ChatSendToRoom extends SWGPacket { public static final int CRC = getCrc("ChatSendToRoom"); @@ -44,21 +40,27 @@ public class ChatSendToRoom extends SWGPacket { private int sequence; // This seems to vary from room to room, client keeps track individually for each room? @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - message = getUnicode(data); - outOfBandPackage = getEncodable(data, OutOfBandPackage.class); - roomId = getInt(data); - sequence = getInt(data); + message = data.getUnicode(); + outOfBandPackage = data.getEncodable(OutOfBandPackage.class); + roomId = data.getInt(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - return super.encode(); + public NetBuffer encode() { + byte [] oobRaw = outOfBandPackage.encode(); + NetBuffer data = NetBuffer.allocate(12 + message.length()*2 + oobRaw.length); + data.addUnicode(message); + data.addRawArray(oobRaw); + data.addInt(roomId); + data.addInt(sequence); + return data; } - + public String getMessage() { return message; } diff --git a/src/network/packets/swg/zone/chat/ChatSystemMessage.java b/src/network/packets/swg/zone/chat/ChatSystemMessage.java index 1f2519ca7..c48fe796f 100644 --- a/src/network/packets/swg/zone/chat/ChatSystemMessage.java +++ b/src/network/packets/swg/zone/chat/ChatSystemMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.encodables.OutOfBandPackage; @@ -61,31 +61,35 @@ public class ChatSystemMessage extends SWGPacket { this(type.ordinal(), oob); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - type = getByte(data); - message = getUnicode(data); - getUnicode(data); + type = data.getByte(); + message = data.getUnicode(); + data.getUnicode(); } - public ByteBuffer encode() { - byte[] oobData = (oob != null ? oob.encode() : null); + @Override + public NetBuffer encode() { + boolean oobExists = (oob != null); int length = 7; - if (oobData == null) length+= 15 + message.length() * 2; - else length+= 4 + oobData.length; + if (oobExists) + length += 4 + oob.getLength(); + else + length += 15 + message.length() * 2; - ByteBuffer data = ByteBuffer.allocate(length); - addShort( data, 4); - addInt( data, CRC); - addByte( data, type); - if (oobData == null) { - addUnicode(data, message); - addUnicode(data, ""); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(4); + data.addInt(CRC); + data.addByte(type); + if (oobExists) { + data.addInt(0); + data.addEncodable(oob); } else { - addInt(data, 0); - addData(data, oobData); + data.addUnicode(message); + data.addInt(0); } return data; diff --git a/src/network/packets/swg/zone/chat/ChatUnbanAvatarFromRoom.java b/src/network/packets/swg/zone/chat/ChatUnbanAvatarFromRoom.java index 40affd9a7..5a7e8aecd 100644 --- a/src/network/packets/swg/zone/chat/ChatUnbanAvatarFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatUnbanAvatarFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -43,23 +43,23 @@ public class ChatUnbanAvatarFromRoom extends SWGPacket { private int sequence; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + avatar.encode().length + room.length()); - addShort(bb, 4); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + avatar.encode().length + room.length()); + data.addShort(4); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + data.addInt(sequence); + return data; } public ChatAvatar getAvatar() { diff --git a/src/network/packets/swg/zone/chat/ChatUninviteFromRoom.java b/src/network/packets/swg/zone/chat/ChatUninviteFromRoom.java index f4ca028c1..798255cce 100644 --- a/src/network/packets/swg/zone/chat/ChatUninviteFromRoom.java +++ b/src/network/packets/swg/zone/chat/ChatUninviteFromRoom.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.chat.ChatAvatar; @@ -43,23 +43,23 @@ public class ChatUninviteFromRoom extends SWGPacket { private int sequence; @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - avatar = getEncodable(data, ChatAvatar.class); - room = getAscii(data); - sequence = getInt(data); + avatar = data.getEncodable(ChatAvatar.class); + room = data.getAscii(); + sequence = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(12 + avatar.encode().length + room.length()); - addShort(bb, 4); - addInt(bb, CRC); - addEncodable(bb, avatar); - addAscii(bb, room); - addInt(bb, sequence); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(12 + avatar.encode().length + room.length()); + data.addShort(4); + data.addInt(CRC); + data.addEncodable(avatar); + data.addAscii(room); + data.addInt(sequence); + return data; } public ChatAvatar getAvatar() { diff --git a/src/network/packets/swg/zone/chat/ConGenericMessage.java b/src/network/packets/swg/zone/chat/ConGenericMessage.java index fa8e714e3..486159eae 100644 --- a/src/network/packets/swg/zone/chat/ConGenericMessage.java +++ b/src/network/packets/swg/zone/chat/ConGenericMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,23 +44,25 @@ public class ConGenericMessage extends SWGPacket { this.message = message; } - public ConGenericMessage(ByteBuffer data) { + public ConGenericMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - message = getAscii(data); - getInt(data); + message = data.getAscii(); + data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8 + message.length()); - addShort(data, 3); - addInt (data, CRC); - addAscii(data, message); - addInt (data, 0); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + message.length()); + data.addShort(3); + data.addInt(CRC); + data.addAscii(message); + data.addInt(0); return data; } diff --git a/src/network/packets/swg/zone/chat/VoiceChatStatus.java b/src/network/packets/swg/zone/chat/VoiceChatStatus.java index 00f34ec0d..8e2669687 100644 --- a/src/network/packets/swg/zone/chat/VoiceChatStatus.java +++ b/src/network/packets/swg/zone/chat/VoiceChatStatus.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.chat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -39,21 +39,21 @@ public class VoiceChatStatus extends SWGPacket { } - public VoiceChatStatus(ByteBuffer data) { + public VoiceChatStatus(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - getInt(data); + data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(10); - addShort(data, 2); - addInt (data, CRC); - addInt (data, 1); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(2); + data.addInt(CRC); + data.addInt(1); return data; } diff --git a/src/network/packets/swg/zone/combat/GrantCommandMessage.java b/src/network/packets/swg/zone/combat/GrantCommandMessage.java index bdc62bc9c..040ae9e92 100644 --- a/src/network/packets/swg/zone/combat/GrantCommandMessage.java +++ b/src/network/packets/swg/zone/combat/GrantCommandMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.combat; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -45,21 +45,21 @@ public class GrantCommandMessage extends SWGPacket { this.command = command; } - public GrantCommandMessage(ByteBuffer data) { + public GrantCommandMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - this.command = getAscii(data); + this.command = data.getAscii(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8 + command.length()); - addShort(data, 2); - addInt( data, CRC); - addAscii(data, command); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8 + command.length()); + data.addShort(2); + data.addInt(CRC); + data.addAscii(command); return data; } diff --git a/src/network/packets/swg/zone/deltas/DeltasMessage.java b/src/network/packets/swg/zone/deltas/DeltasMessage.java index f5c1f9eb6..d4e8281e6 100644 --- a/src/network/packets/swg/zone/deltas/DeltasMessage.java +++ b/src/network/packets/swg/zone/deltas/DeltasMessage.java @@ -27,73 +27,97 @@ ***********************************************************************************/ package network.packets.swg.zone.deltas; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import network.packets.swg.zone.baselines.Baseline.BaselineType; public class DeltasMessage extends SWGPacket { + public static final int CRC = getCrc("DeltasMessage"); private long objId; private BaselineType type; private int num; - private byte [] deltaData; + private byte[] deltaData; private int update; - public DeltasMessage() { } - - public DeltasMessage(long objId, BaselineType type, int typeNumber, byte [] data) { + public DeltasMessage(long objId, BaselineType type, int typeNumber, int update, byte[] data) { this.objId = objId; this.type = type; this.num = typeNumber; this.deltaData = data; } - public DeltasMessage(ByteBuffer data) { + public DeltasMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objId = getLong(data); - byte [] str = new byte[4]; data.get(str); - String strType = new StringBuffer(new String(str, ascii)).reverse().toString(); - for (BaselineType baseType : BaselineType.values()) - if (baseType.toString().equals(strType)) - type = baseType; - num = getByte(data); - int length = getInt(data); - this.deltaData = getArray(data, length); - data = ByteBuffer.wrap(deltaData); - getShort(data); - update = getShort(data); + objId = data.getLong(); + type = BaselineType.valueOf(new StringBuffer(new String(data.getArray(4), ascii)).reverse().toString()); + num = data.getByte(); + NetBuffer deltaDataBuffer = NetBuffer.wrap(data.getArrayLarge()); + deltaDataBuffer.getShort(); + update = deltaDataBuffer.getShort(); + deltaData = data.getArray(deltaDataBuffer.remaining()); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(27 + deltaData.length); - addShort(data, 5); - addInt( data, CRC); - addLong(data, objId); - data.put(new StringBuffer(type.toString()).reverse().toString().getBytes(ascii)); - addByte(data, num); - addInt(data, deltaData.length + 4); - addShort(data, 1); // TODO: How many updates there is (1 always for now until a queue system is built - addShort(data, update); - data.put(deltaData); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(27 + deltaData.length); + data.addShort(5); + data.addInt(CRC); + data.addLong(objId); + data.addRawArray(new StringBuffer(type.toString()).reverse().toString().getBytes(ascii)); + data.addByte(num); + data.addInt(deltaData.length + 4); + data.addShort(1); // updates - only 1 cause we're boring + data.addShort(update); + data.addRawArray(deltaData); return data; } - public long getObjectId() { return objId; } - public BaselineType getType() { return type; } - public int getNum() { return num; } - public int getUpdate() { return update; } - public byte [] getDeltaData() { return deltaData; } + public long getObjectId() { + return objId; + } - public void setType(BaselineType type) { this.type = type; } - public void setNum(int num) { this.num = num; } - public void setId(long id) { this.objId = id; } - public void setData(byte[] data) { this.deltaData = data; } - public void setUpdate(int update) { this.update = update; } + public BaselineType getType() { + return type; + } + + public int getNum() { + return num; + } + + public int getUpdate() { + return update; + } + + public byte[] getDeltaData() { + return deltaData; + } + + public void setType(BaselineType type) { + this.type = type; + } + + public void setNum(int num) { + this.num = num; + } + + public void setId(long id) { + this.objId = id; + } + + public void setData(byte[] data) { + this.deltaData = data; + } + + public void setUpdate(int update) { + this.update = update; + } } diff --git a/src/network/packets/swg/zone/harvesters/ResourceHarvesterActivatePageMessage.java b/src/network/packets/swg/zone/harvesters/ResourceHarvesterActivatePageMessage.java index 3db0ce3d0..74103137d 100644 --- a/src/network/packets/swg/zone/harvesters/ResourceHarvesterActivatePageMessage.java +++ b/src/network/packets/swg/zone/harvesters/ResourceHarvesterActivatePageMessage.java @@ -1,6 +1,6 @@ package network.packets.swg.zone.harvesters; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -13,19 +13,19 @@ public class ResourceHarvesterActivatePageMessage extends SWGPacket { this.harvesterId = harvesterId; } - public ResourceHarvesterActivatePageMessage(ByteBuffer data) { + public ResourceHarvesterActivatePageMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - harvesterId = getLong(data); + harvesterId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(8); - addLong(data, harvesterId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(8); + data.addLong(harvesterId); return data; } diff --git a/src/network/packets/swg/zone/insertion/ChatRoomList.java b/src/network/packets/swg/zone/insertion/ChatRoomList.java index 592e9df8e..36fb1af5b 100644 --- a/src/network/packets/swg/zone/insertion/ChatRoomList.java +++ b/src/network/packets/swg/zone/insertion/ChatRoomList.java @@ -27,52 +27,55 @@ ***********************************************************************************/ package network.packets.swg.zone.insertion; -import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Collection; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; import resources.chat.ChatRoom; public class ChatRoomList extends SWGPacket { + public static final int CRC = getCrc("ChatRoomList"); - + private Collection rooms; - - public ChatRoomList() {} - - public ChatRoomList(ChatRoom ... rooms) { + + public ChatRoomList(ChatRoom... rooms) { this.rooms = Arrays.asList(rooms); } - + public ChatRoomList(Collection rooms) { this.rooms = rooms; } - - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - rooms = getList(data, ChatRoom.class); + rooms = data.getList(ChatRoom.class); } - public ByteBuffer encode() { + @Override + public NetBuffer encode() { int length = 10; for (ChatRoom r : rooms) { - length += r.encode().length; + length += r.getLength(); } - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 2); - addInt( data, CRC); - addList(data, rooms); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addList(rooms); return data; } - + public Collection getRooms() { return rooms; } - + @Override public String toString() { return "ChatRoomList[roomSize=" + rooms.size() + "]"; } + } diff --git a/src/network/packets/swg/zone/insertion/ChatServerStatus.java b/src/network/packets/swg/zone/insertion/ChatServerStatus.java index 7b9d0441b..08299f293 100644 --- a/src/network/packets/swg/zone/insertion/ChatServerStatus.java +++ b/src/network/packets/swg/zone/insertion/ChatServerStatus.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.insertion; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,18 +44,18 @@ public class ChatServerStatus extends SWGPacket { this.online = online; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - online = getBoolean(data); + online = data.getBoolean(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 7; - ByteBuffer data = ByteBuffer.allocate(length); - addShort( data, 2); - addInt( data, CRC); - addBoolean(data, online); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addBoolean(online); return data; } } diff --git a/src/network/packets/swg/zone/insertion/CmdStartScene.java b/src/network/packets/swg/zone/insertion/CmdStartScene.java index 6464eee52..8de91c400 100644 --- a/src/network/packets/swg/zone/insertion/CmdStartScene.java +++ b/src/network/packets/swg/zone/insertion/CmdStartScene.java @@ -27,10 +27,9 @@ ***********************************************************************************/ package network.packets.swg.zone.insertion; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Location; import com.projectswg.common.data.location.Terrain; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.Race; @@ -64,41 +63,41 @@ public class CmdStartScene extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - ignoreLayoutFiles = getBoolean(data); - charId = getLong(data); - String ter = getAscii(data); + ignoreLayoutFiles = data.getBoolean(); + charId = data.getLong(); + String ter = data.getAscii(); l.setTerrain(null); for (Terrain t : Terrain.values()) if (t.getFile().equals(ter)) l.setTerrain(t); - l.setX(getFloat(data)); - l.setY(getFloat(data)); - l.setZ(getFloat(data)); - l.setHeading(getFloat(data)); - race = Race.getRaceByFile(getAscii(data)); - galacticTime = getLong(data); - serverEpoch = getInt(data); + l.setX(data.getFloat()); + l.setY(data.getFloat()); + l.setZ(data.getFloat()); + l.setHeading(data.getFloat()); + race = Race.getRaceByFile(data.getAscii()); + galacticTime = data.getLong(); + serverEpoch = data.getInt(); } @Override - public ByteBuffer encode() { + public NetBuffer encode() { int length = 47 + l.getTerrain().getFile().length() + race.getFilename().length(); - ByteBuffer data = ByteBuffer.allocate(length); - addShort( data, 2); - addInt( data, CRC); - addBoolean(data, ignoreLayoutFiles); - addLong( data, charId); - addAscii( data, l.getTerrain().getFile()); - addFloat( data, (float) l.getX()); - addFloat( data, (float) l.getY()); - addFloat( data, (float) l.getZ()); - addFloat( data, (float) l.getYaw()); - addAscii( data, race.getFilename()); - addLong( data, galacticTime); - addInt (data, serverEpoch); + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addBoolean(ignoreLayoutFiles); + data.addLong(charId); + data.addAscii(l.getTerrain().getFile()); + data.addFloat((float) l.getX()); + data.addFloat((float) l.getY()); + data.addFloat((float) l.getZ()); + data.addFloat((float) l.getYaw()); + data.addAscii(race.getFilename()); + data.addLong(galacticTime); + data.addInt(serverEpoch); return data; } diff --git a/src/network/packets/swg/zone/insertion/ConnectPlayerMessage.java b/src/network/packets/swg/zone/insertion/ConnectPlayerMessage.java index 74c005044..091a6294a 100644 --- a/src/network/packets/swg/zone/insertion/ConnectPlayerMessage.java +++ b/src/network/packets/swg/zone/insertion/ConnectPlayerMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.insertion; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -40,18 +40,18 @@ public class ConnectPlayerMessage extends SWGPacket { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - stationId = getInt(data); + stationId = data.getInt(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 10; - ByteBuffer data = ByteBuffer.allocate(length); - addShort(data, 2); - addInt( data, CRC); - addInt( data, stationId); // stationId that's sent when using auto-login + NetBuffer data = NetBuffer.allocate(length); + data.addShort(2); + data.addInt(CRC); + data.addInt(stationId); // stationId that's sent when using auto-login return data; } } diff --git a/src/network/packets/swg/zone/insertion/SelectCharacter.java b/src/network/packets/swg/zone/insertion/SelectCharacter.java index f2155e430..e462d8394 100644 --- a/src/network/packets/swg/zone/insertion/SelectCharacter.java +++ b/src/network/packets/swg/zone/insertion/SelectCharacter.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.insertion; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -44,17 +44,17 @@ public class SelectCharacter extends SWGPacket { this.charId = id; } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - charId = getLong(data); + charId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(14); - addShort(data, 2); - addInt( data, CRC); - addLong( data, charId); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(14); + data.addShort(2); + data.addInt(CRC); + data.addLong(charId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/Animation.java b/src/network/packets/swg/zone/object_controller/Animation.java index 15be90817..abcbbe4f1 100644 --- a/src/network/packets/swg/zone/object_controller/Animation.java +++ b/src/network/packets/swg/zone/object_controller/Animation.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class Animation extends ObjectController { @@ -40,22 +40,22 @@ public class Animation extends ObjectController { this.animation = animation; } - public Animation(ByteBuffer data) { + public Animation(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - animation = getAscii(data); + animation = data.getAscii(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 2 + animation.length()); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 2 + animation.length()); encodeHeader(data); - addAscii(data, animation); + data.addAscii(animation); return data; } } diff --git a/src/network/packets/swg/zone/object_controller/BiographyUpdate.java b/src/network/packets/swg/zone/object_controller/BiographyUpdate.java index a9e7cff0c..fd438fc2c 100644 --- a/src/network/packets/swg/zone/object_controller/BiographyUpdate.java +++ b/src/network/packets/swg/zone/object_controller/BiographyUpdate.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class BiographyUpdate extends ObjectController { @@ -42,22 +42,22 @@ public class BiographyUpdate extends ObjectController { setBiography(biography); } - public BiographyUpdate(ByteBuffer data) { + public BiographyUpdate(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - targetId = getLong(data); - biography = getUnicode(data); + targetId = data.getLong(); + biography = data.getUnicode(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + Long.BYTES + Integer.BYTES + biography.length() * 2); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + Long.BYTES + Integer.BYTES + biography.length() * 2); encodeHeader(data); - addLong(data, targetId); - addUnicode(data, biography); + data.addLong(targetId); + data.addUnicode(biography); return data; } diff --git a/src/network/packets/swg/zone/object_controller/ChangeRoleIconChoice.java b/src/network/packets/swg/zone/object_controller/ChangeRoleIconChoice.java index d3dafbc7d..75064f910 100644 --- a/src/network/packets/swg/zone/object_controller/ChangeRoleIconChoice.java +++ b/src/network/packets/swg/zone/object_controller/ChangeRoleIconChoice.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class ChangeRoleIconChoice extends ObjectController { @@ -39,7 +39,7 @@ public class ChangeRoleIconChoice extends ObjectController { super(objectId, CRC); } - public ChangeRoleIconChoice(ByteBuffer data) { + public ChangeRoleIconChoice(NetBuffer data) { super(CRC); decode(data); } @@ -50,16 +50,16 @@ public class ChangeRoleIconChoice extends ObjectController { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - iconChoice = getInt(data); + iconChoice = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + Integer.BYTES); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + Integer.BYTES); encodeHeader(data); - addInt(data, iconChoice); + data.addInt(iconChoice); return data; } diff --git a/src/network/packets/swg/zone/object_controller/CommandQueueDequeue.java b/src/network/packets/swg/zone/object_controller/CommandQueueDequeue.java index d1ab81b3b..04bd1ceb3 100644 --- a/src/network/packets/swg/zone/object_controller/CommandQueueDequeue.java +++ b/src/network/packets/swg/zone/object_controller/CommandQueueDequeue.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class CommandQueueDequeue extends ObjectController { @@ -43,26 +43,26 @@ public class CommandQueueDequeue extends ObjectController { super(objectId, CRC); } - public CommandQueueDequeue(ByteBuffer data) { + public CommandQueueDequeue(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - counter = getInt(data); - timer = getFloat(data); - error = getInt(data); - action = getInt(data); + counter = data.getInt(); + timer = data.getFloat(); + error = data.getInt(); + action = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 16); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 16); encodeHeader(data); - addInt(data, counter); - addFloat(data, timer); - addInt(data, error); - addInt(data, action); + data.addInt(counter); + data.addFloat(timer); + data.addInt(error); + data.addInt(action); return data; } diff --git a/src/network/packets/swg/zone/object_controller/CommandQueueEnqueue.java b/src/network/packets/swg/zone/object_controller/CommandQueueEnqueue.java index 13809d30a..0ce8e646b 100644 --- a/src/network/packets/swg/zone/object_controller/CommandQueueEnqueue.java +++ b/src/network/packets/swg/zone/object_controller/CommandQueueEnqueue.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class CommandQueueEnqueue extends ObjectController { @@ -47,26 +47,26 @@ public class CommandQueueEnqueue extends ObjectController { this.arguments = arguments; } - public CommandQueueEnqueue(ByteBuffer data) { + public CommandQueueEnqueue(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - counter = getInt(data); - crc = getInt(data); - targetId = getLong(data); - arguments = getUnicode(data); + counter = data.getInt(); + crc = data.getInt(); + targetId = data.getLong(); + arguments = data.getUnicode(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 20 + arguments.length()*2); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 20 + arguments.length()*2); encodeHeader(data); - addInt(data, counter); - addInt(data, crc); - addLong(data, targetId); - addUnicode(data, arguments); + data.addInt(counter); + data.addInt(crc); + data.addLong(targetId); + data.addUnicode(arguments); return data; } diff --git a/src/network/packets/swg/zone/object_controller/CommandTimer.java b/src/network/packets/swg/zone/object_controller/CommandTimer.java index ae153d48f..e2d6523ef 100644 --- a/src/network/packets/swg/zone/object_controller/CommandTimer.java +++ b/src/network/packets/swg/zone/object_controller/CommandTimer.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class CommandTimer extends ObjectController { @@ -44,26 +44,26 @@ public class CommandTimer extends ObjectController { super(objectId, CRC); } - public CommandTimer(ByteBuffer data) { + public CommandTimer(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 29); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 29); encodeHeader(data); - addByte(data, 4); // 0 for no cooldown, 0x26 to add defaultTime (usually 0.25) - addInt(data, sequenceId); - addInt(data, 0); // Unknown - addInt(data, 0); // Unknown - addInt(data, commandNameCrc); - addInt(data, cooldownGroupCrc); - addFloat(data, cooldownMin); - addFloat(data, cooldownMax); + data.addByte(4); // 0 for no cooldown, 0x26 to add defaultTime (usually 0.25) + data.addInt(sequenceId); + data.addInt(0); // Unknown + data.addInt(0); // Unknown + data.addInt(commandNameCrc); + data.addInt(cooldownGroupCrc); + data.addFloat(cooldownMin); + data.addFloat(cooldownMax); return data; } diff --git a/src/network/packets/swg/zone/object_controller/CraftAcknowledge.java b/src/network/packets/swg/zone/object_controller/CraftAcknowledge.java index 11ce2e6cd..66600fe38 100644 --- a/src/network/packets/swg/zone/object_controller/CraftAcknowledge.java +++ b/src/network/packets/swg/zone/object_controller/CraftAcknowledge.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class CraftAcknowledge extends ObjectController { @@ -44,26 +44,26 @@ public class CraftAcknowledge extends ObjectController { this.updateCounter = updateCounter; } - public CraftAcknowledge(ByteBuffer data) { + public CraftAcknowledge(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - acknowledgeId = getInt(data); - errorId = getInt(data); - updateCounter = getByte(data); + acknowledgeId = data.getInt(); + errorId = data.getInt(); + updateCounter = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 9); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 9); encodeHeader(data); - addInt(data, acknowledgeId); - addInt(data, errorId); - addByte(data, updateCounter); + data.addInt(acknowledgeId); + data.addInt(errorId); + data.addByte(updateCounter); return data; } diff --git a/src/network/packets/swg/zone/object_controller/CraftExperimentationResponse.java b/src/network/packets/swg/zone/object_controller/CraftExperimentationResponse.java index c19020f3d..44df601ec 100644 --- a/src/network/packets/swg/zone/object_controller/CraftExperimentationResponse.java +++ b/src/network/packets/swg/zone/object_controller/CraftExperimentationResponse.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class CraftExperimentationResponse extends ObjectController{ @@ -44,26 +44,26 @@ public class CraftExperimentationResponse extends ObjectController{ this.staleFlag = staleFlag; } - public CraftExperimentationResponse(ByteBuffer data) { + public CraftExperimentationResponse(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - acknowledgeId = getInt(data); - stringId = getInt(data); - staleFlag = getByte(data); + acknowledgeId = data.getInt(); + stringId = data.getInt(); + staleFlag = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 9); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 9); encodeHeader(data); - addInt(data, acknowledgeId); - addInt(data, stringId); - addByte(data, staleFlag); + data.addInt(acknowledgeId); + data.addInt(stringId); + data.addByte(staleFlag); return data; } diff --git a/src/network/packets/swg/zone/object_controller/CraftingSessionEnded.java b/src/network/packets/swg/zone/object_controller/CraftingSessionEnded.java index 714323100..d899cc90d 100644 --- a/src/network/packets/swg/zone/object_controller/CraftingSessionEnded.java +++ b/src/network/packets/swg/zone/object_controller/CraftingSessionEnded.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class CraftingSessionEnded extends ObjectController{ @@ -44,26 +44,26 @@ public class CraftingSessionEnded extends ObjectController{ this.count = count; } - public CraftingSessionEnded(ByteBuffer data) { + public CraftingSessionEnded(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - playerId = getLong(data); - sessionId = getInt(data); - count = getByte(data); + playerId = data.getLong(); + sessionId = data.getInt(); + count = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 13); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 13); encodeHeader(data); - addLong(data, playerId); - addInt(data, sessionId); - addByte(data, count); + data.addLong(playerId); + data.addInt(sessionId); + data.addByte(count); return data; } diff --git a/src/network/packets/swg/zone/object_controller/DataTransform.java b/src/network/packets/swg/zone/object_controller/DataTransform.java index e2b5ce0d1..cd7cce37c 100644 --- a/src/network/packets/swg/zone/object_controller/DataTransform.java +++ b/src/network/packets/swg/zone/object_controller/DataTransform.java @@ -27,9 +27,8 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Location; +import com.projectswg.common.network.NetBuffer; public class DataTransform extends ObjectController { @@ -65,33 +64,33 @@ public class DataTransform extends ObjectController { this.updateCounter = counter; } - public DataTransform(ByteBuffer data) { + public DataTransform(NetBuffer data) { super(CRC); this.l = new Location(); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - timestamp = getInt(data); - updateCounter = getInt(data); - l = getEncodable(data, Location.class); - speed = getFloat(data); - lookAtYaw = getFloat(data); - useLookAtYaw = getBoolean(data); + timestamp = data.getInt(); + updateCounter = data.getInt(); + l = data.getEncodable(Location.class); + speed = data.getFloat(); + lookAtYaw = data.getFloat(); + useLookAtYaw = data.getBoolean(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 45); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 45); encodeHeader(data); - addInt(data, timestamp); - addInt(data, updateCounter); - addEncodable(data, l); - addFloat(data, speed); - addFloat(data, lookAtYaw); - addBoolean(data, useLookAtYaw); + data.addInt(timestamp); + data.addInt(updateCounter); + data.addEncodable(l); + data.addFloat(speed); + data.addFloat(lookAtYaw); + data.addBoolean(useLookAtYaw); return data; } diff --git a/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java b/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java index e98eb69cb..a3a77cc34 100644 --- a/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java +++ b/src/network/packets/swg/zone/object_controller/DataTransformWithParent.java @@ -28,9 +28,8 @@ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Location; +import com.projectswg.common.network.NetBuffer; public class DataTransformWithParent extends ObjectController { @@ -48,25 +47,25 @@ public class DataTransformWithParent extends ObjectController { super(objectId, CRC); } - public DataTransformWithParent(ByteBuffer data) { + public DataTransformWithParent(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - timestamp = getInt(data); // Timestamp - counter = getInt(data); - cellId = getLong(data); - l = getEncodable(data, Location.class); - speed = getFloat(data); - lookAtYaw = getFloat(data); - useLookAtYaw = getBoolean(data); + timestamp = data.getInt(); // Timestamp + counter = data.getInt(); + cellId = data.getLong(); + l = data.getEncodable(Location.class); + speed = data.getFloat(); + lookAtYaw = data.getFloat(); + useLookAtYaw = data.getBoolean(); } @Override - public ByteBuffer encode() { + public NetBuffer encode() { return null; } diff --git a/src/network/packets/swg/zone/object_controller/IntendedTarget.java b/src/network/packets/swg/zone/object_controller/IntendedTarget.java index b3bb43094..33c87d898 100644 --- a/src/network/packets/swg/zone/object_controller/IntendedTarget.java +++ b/src/network/packets/swg/zone/object_controller/IntendedTarget.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class IntendedTarget extends ObjectController { @@ -40,20 +40,20 @@ public class IntendedTarget extends ObjectController { setTargetId(targetId); } - public IntendedTarget(ByteBuffer data) { + public IntendedTarget(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - targetId = getLong(data); + targetId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 2); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 2); encodeHeader(data); - addLong(data, targetId); + data.addLong(targetId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/JTLTerminalSharedMessage.java b/src/network/packets/swg/zone/object_controller/JTLTerminalSharedMessage.java index d52a63608..3a66912dc 100644 --- a/src/network/packets/swg/zone/object_controller/JTLTerminalSharedMessage.java +++ b/src/network/packets/swg/zone/object_controller/JTLTerminalSharedMessage.java @@ -1,6 +1,6 @@ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class JTLTerminalSharedMessage extends ObjectController { @@ -9,7 +9,7 @@ public class JTLTerminalSharedMessage extends ObjectController { private int tickCount; private long terminalId; - public JTLTerminalSharedMessage(ByteBuffer data) { + public JTLTerminalSharedMessage(NetBuffer data) { super(CRC); } @@ -30,7 +30,7 @@ public class JTLTerminalSharedMessage extends ObjectController { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); setTickCount(data.getInt()); setTerminalId(data.getLong()); @@ -38,11 +38,11 @@ public class JTLTerminalSharedMessage extends ObjectController { } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 12); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 12); encodeHeader(data); - addInt(data, getTickCount()); - addLong(data, getTerminalId()); + data.addInt(getTickCount()); + data.addLong(getTerminalId()); return data; } } \ No newline at end of file diff --git a/src/network/packets/swg/zone/object_controller/JumpUpdate.java b/src/network/packets/swg/zone/object_controller/JumpUpdate.java index fdc6347fc..e43acc98a 100644 --- a/src/network/packets/swg/zone/object_controller/JumpUpdate.java +++ b/src/network/packets/swg/zone/object_controller/JumpUpdate.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class JumpUpdate extends ObjectController { @@ -38,14 +38,14 @@ public class JumpUpdate extends ObjectController { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH); encodeHeader(data); return data; diff --git a/src/network/packets/swg/zone/object_controller/LookAtTarget.java b/src/network/packets/swg/zone/object_controller/LookAtTarget.java index b48ecbda1..259dffa59 100644 --- a/src/network/packets/swg/zone/object_controller/LookAtTarget.java +++ b/src/network/packets/swg/zone/object_controller/LookAtTarget.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class LookAtTarget extends ObjectController { @@ -40,20 +40,20 @@ public class LookAtTarget extends ObjectController { setTargetId(targetId); } - public LookAtTarget(ByteBuffer data) { + public LookAtTarget(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - targetId = getLong(data); + targetId = data.getLong(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 2); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 2); encodeHeader(data); - addLong(data, targetId); + data.addLong(targetId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftCustomization.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftCustomization.java index e7fe1dd7b..1fc0f028e 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftCustomization.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftCustomization.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftCustomization extends ObjectController { @@ -50,37 +50,37 @@ public class MessageQueueCraftCustomization extends ObjectController { this.value = value; } - public MessageQueueCraftCustomization(ByteBuffer data) { + public MessageQueueCraftCustomization(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - itemName = getUnicode(data); - appearenceTemplate = getByte(data); - itemAmount = getInt(data); - count = getByte(data); + itemName = data.getUnicode(); + appearenceTemplate = data.getByte(); + itemAmount = data.getInt(); + count = data.getByte(); for(int i = 0; i < count; i++){ - property[i] = getInt(data); - value[i] = getInt(data); + property[i] = data.getInt(); + value[i] = data.getInt(); } } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 10 + itemName.length()*2 + count * 8); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 10 + itemName.length()*2 + count * 8); encodeHeader(data); - addUnicode(data, itemName); - addByte(data, appearenceTemplate); - addInt(data, itemAmount); - addByte(data, count); + data.addUnicode(itemName); + data.addByte(appearenceTemplate); + data.addInt(itemAmount); + data.addByte(count); for(int i = 0; i < count; i++){ - addInt(data, property[i] ); - addInt(data, value[i]); + data.addInt(property[i] ); + data.addInt(value[i]); } return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftEmptySlot.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftEmptySlot.java index 391f1e430..d4c41fc7e 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftEmptySlot.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftEmptySlot.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftEmptySlot extends ObjectController{ @@ -44,26 +44,26 @@ public class MessageQueueCraftEmptySlot extends ObjectController{ this.staleFlag = staleFlag; } - public MessageQueueCraftEmptySlot(ByteBuffer data) { + public MessageQueueCraftEmptySlot(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - slot = getInt(data); - containerId = getLong(data); - staleFlag = getByte(data); + slot = data.getInt(); + containerId = data.getLong(); + staleFlag = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 13); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 13); encodeHeader(data); - addInt(data, slot); - addLong(data, containerId); - addByte(data, staleFlag); + data.addInt(slot); + data.addLong(containerId); + data.addByte(staleFlag); return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftExperiment.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftExperiment.java index dd93c163c..b724d6e3a 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftExperiment.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftExperiment.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftExperiment extends ObjectController { @@ -45,31 +45,31 @@ public class MessageQueueCraftExperiment extends ObjectController { this.statExperimentationAmount = statExperimentationAmount; this.spentPoints = spentPoints; } - public MessageQueueCraftExperiment(ByteBuffer data) { + public MessageQueueCraftExperiment(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - actionCounter = getByte(data); - statCount = getInt(data); + actionCounter = data.getByte(); + statCount = data.getInt(); for(int i = 0; i < statCount; i++){ - statExperimentationAmount[i] = getInt(data); - spentPoints[i] = getInt(data); + statExperimentationAmount[i] = data.getInt(); + spentPoints[i] = data.getInt(); } } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 5 + statCount * 8); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 5 + statCount * 8); encodeHeader(data); - addByte(data, actionCounter); - addInt(data, statCount); + data.addByte(actionCounter); + data.addInt(statCount); for(int i = 0; i < statCount; i++){ - addInt(data, statExperimentationAmount[i]); - addInt(data, spentPoints[i]); + data.addInt(statExperimentationAmount[i]); + data.addInt(spentPoints[i]); } return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftFillSlot.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftFillSlot.java index d88bb9684..b27a84ffc 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftFillSlot.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftFillSlot.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftFillSlot extends ObjectController{ @@ -46,28 +46,28 @@ public class MessageQueueCraftFillSlot extends ObjectController{ this.sequenceId = sequenceId; } - public MessageQueueCraftFillSlot(ByteBuffer data) { + public MessageQueueCraftFillSlot(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - resourceId = getLong(data); - slotId = getInt(data); - option = getInt(data); - sequenceId = getByte(data); + resourceId = data.getLong(); + slotId = data.getInt(); + option = data.getInt(); + sequenceId = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 17 ); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 17 ); encodeHeader(data); - addLong(data, resourceId); - addInt(data, slotId); - addInt(data, option); - addByte(data, sequenceId); + data.addLong(resourceId); + data.addInt(slotId); + data.addInt(option); + data.addByte(sequenceId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftIngredients.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftIngredients.java index bfe30203d..7c90daf78 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftIngredients.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftIngredients.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftIngredients extends ObjectController { @@ -46,34 +46,34 @@ public class MessageQueueCraftIngredients extends ObjectController { this.quantity = quantity; } - public MessageQueueCraftIngredients(ByteBuffer data) { + public MessageQueueCraftIngredients(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - count = getInt(data); + count = data.getInt(); for(int i = 0; i < count; i++){ - resourceName[i] = getUnicode(data); - type[i] = getByte(data); - quantity[i] = getInt(data); + resourceName[i] = data.getUnicode(); + type[i] = data.getByte(); + quantity[i] = data.getInt(); } } @Override - public ByteBuffer encode() { + public NetBuffer encode() { int len = 4; for (int i = 0; i < count; i++) len += 9 + resourceName[i].length(); - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 4 + len); + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 4 + len); encodeHeader(data); - addInt(data, count); + data.addInt(count); for(int i = 0; i < count; i++){ - addUnicode(data, resourceName[i] ); - addByte(data, type[i]); - addInt(data, quantity[i]); + data.addUnicode(resourceName[i] ); + data.addByte(type[i]); + data.addInt(quantity[i]); } return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftRequestSession.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftRequestSession.java index 2e625b77c..d52f29480 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftRequestSession.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftRequestSession.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftRequestSession extends ObjectController{ @@ -42,24 +42,24 @@ public class MessageQueueCraftRequestSession extends ObjectController{ this.sequenceId = sequenceId; } - public MessageQueueCraftRequestSession(ByteBuffer data) { + public MessageQueueCraftRequestSession(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - sessionId = getLong(data); - sequenceId = getInt(data); + sessionId = data.getLong(); + sequenceId = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 12); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 12); encodeHeader(data); - addLong(data, sessionId); - addInt(data, sequenceId); + data.addLong(sessionId); + data.addInt(sequenceId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueCraftSelectSchematic.java b/src/network/packets/swg/zone/object_controller/MessageQueueCraftSelectSchematic.java index 3976dc8c9..9ea9b74e3 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueCraftSelectSchematic.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueCraftSelectSchematic.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueCraftSelectSchematic extends ObjectController { @@ -40,22 +40,22 @@ public class MessageQueueCraftSelectSchematic extends ObjectController { this.schematicId = schematicId; } - public MessageQueueCraftSelectSchematic(ByteBuffer data) { + public MessageQueueCraftSelectSchematic(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - schematicId = getInt(data); + schematicId = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 4 ); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 4 ); encodeHeader(data); - addInt(data, schematicId); + data.addInt(schematicId); return data; } } \ No newline at end of file diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueDraftSchematics.java b/src/network/packets/swg/zone/object_controller/MessageQueueDraftSchematics.java index 11f1d28f6..433bcb58a 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueDraftSchematics.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueDraftSchematics.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueDraftSchematics extends ObjectController { @@ -50,35 +50,35 @@ public class MessageQueueDraftSchematics extends ObjectController { System.arraycopy(schematicSubcategories, 0, this.schematicSubcategories, 0, 4); } - public MessageQueueDraftSchematics(ByteBuffer data) { + public MessageQueueDraftSchematics(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - toolId = getLong(data); - craftingStationId = getLong(data); - schematicsCounter = getInt(data); + toolId = data.getLong(); + craftingStationId = data.getLong(); + schematicsCounter = data.getInt(); for(int i = 0; i < schematicsCounter; i++){ - schematicsId[i] = getInt(data); - schematicsCrc[i] = getInt(data); - schematicSubcategories[i] = getArray(data); + schematicsId[i] = data.getInt(); + schematicsCrc[i] = data.getInt(); + schematicSubcategories[i] = data.getArray(4); } } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 20 + schematicsCounter * 12 + schematicSubcategories.length); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 20 + schematicsCounter * 12 + schematicSubcategories.length); encodeHeader(data); - addLong(data, toolId); - addLong(data, craftingStationId); - addInt(data, schematicsCounter); + data.addLong(toolId); + data.addLong(craftingStationId); + data.addInt(schematicsCounter); for(int i = 0; i< schematicsCounter; i++){ - addInt(data, schematicsId[i]); - addInt(data, schematicsCrc[i]); - addData(data, schematicSubcategories[i]); + data.addInt(schematicsId[i]); + data.addInt(schematicsCrc[i]); + data.addRawArray(schematicSubcategories[i]); } return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueHarvesterResourceData.java b/src/network/packets/swg/zone/object_controller/MessageQueueHarvesterResourceData.java index 5e2da230f..817b8d4bd 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueHarvesterResourceData.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueHarvesterResourceData.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueHarvesterResourceData extends ObjectController { @@ -50,39 +50,39 @@ public class MessageQueueHarvesterResourceData extends ObjectController { this.resourceDensity = resourceDensity; } - public MessageQueueHarvesterResourceData(ByteBuffer data) { + public MessageQueueHarvesterResourceData(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - harvesterId = getLong(data); - resourceListSize = getInt(data); + harvesterId = data.getLong(); + resourceListSize = data.getInt(); for(int i = 0; i < resourceListSize; i++){ - resourceId[i] = getLong(data); - resourceName[i] = getUnicode(data); - resourceType[i] = getUnicode(data); - resourceDensity[i] = getByte(data); + resourceId[i] = data.getLong(); + resourceName[i] = data.getUnicode(); + resourceType[i] = data.getUnicode(); + resourceDensity[i] = data.getByte(); } } @Override - public ByteBuffer encode() { + public NetBuffer encode() { int len = HEADER_LENGTH + 12; for (int i = 0; i < resourceListSize; i++) len += 17 + resourceName[i].length() * 2 + resourceType[i].length() * 2; - ByteBuffer data = ByteBuffer.allocate(len); + NetBuffer data = NetBuffer.allocate(len); encodeHeader(data); - addLong(data, harvesterId); - addInt(data, resourceListSize); + data.addLong(harvesterId); + data.addInt(resourceListSize); for(int i = 0; i < resourceListSize; i++){ - addLong(data, resourceId[i]); - addUnicode(data, resourceName[i]); - addUnicode(data, resourceType[i]); - addByte(data, resourceDensity[i]); + data.addLong(resourceId[i]); + data.addUnicode(resourceName[i]); + data.addUnicode(resourceType[i]); + data.addByte(resourceDensity[i]); } return data; diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueResourceEmptyHopper.java b/src/network/packets/swg/zone/object_controller/MessageQueueResourceEmptyHopper.java index 8d52ba585..08698f43a 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueResourceEmptyHopper.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueResourceEmptyHopper.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueResourceEmptyHopper extends ObjectController { @@ -48,30 +48,30 @@ public class MessageQueueResourceEmptyHopper extends ObjectController { this.sequenceId = sequenceId; } - public MessageQueueResourceEmptyHopper(ByteBuffer data){ + public MessageQueueResourceEmptyHopper(NetBuffer data){ super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - playerId = getLong(data); - harvesterId = getLong(data); - amount = getInt(data); - discard = getBoolean(data); - sequenceId = getInt(data); + playerId = data.getLong(); + harvesterId = data.getLong(); + amount = data.getInt(); + discard = data.getBoolean(); + sequenceId = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 25 ); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 25 ); encodeHeader(data); - addLong(data, playerId); - addLong(data, harvesterId); - addInt(data, amount); - addBoolean(data, discard); - addInt(data, sequenceId); + data.addLong(playerId); + data.addLong(harvesterId); + data.addInt(amount); + data.addBoolean(discard); + data.addInt(sequenceId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/MessageQueueSpaceMiningSellResource.java b/src/network/packets/swg/zone/object_controller/MessageQueueSpaceMiningSellResource.java index 85c90186a..9c6b94d10 100644 --- a/src/network/packets/swg/zone/object_controller/MessageQueueSpaceMiningSellResource.java +++ b/src/network/packets/swg/zone/object_controller/MessageQueueSpaceMiningSellResource.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MessageQueueSpaceMiningSellResource extends ObjectController{ @@ -46,28 +46,28 @@ public class MessageQueueSpaceMiningSellResource extends ObjectController{ this.amount = amount; } - public MessageQueueSpaceMiningSellResource(ByteBuffer data) { + public MessageQueueSpaceMiningSellResource(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - shipId = getLong(data); - spaceStationId = getLong(data); - resourceId = getLong(data); - amount = getInt(data); + shipId = data.getLong(); + spaceStationId = data.getLong(); + resourceId = data.getLong(); + amount = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 28 ); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 28 ); encodeHeader(data); - addLong(data, shipId); - addLong(data, spaceStationId); - addLong(data, resourceId); - addInt(data, amount); + data.addLong(shipId); + data.addLong(spaceStationId); + data.addLong(resourceId); + data.addInt(amount); return data; } diff --git a/src/network/packets/swg/zone/object_controller/MissionListRequest.java b/src/network/packets/swg/zone/object_controller/MissionListRequest.java index 349030296..af47dcba8 100644 --- a/src/network/packets/swg/zone/object_controller/MissionListRequest.java +++ b/src/network/packets/swg/zone/object_controller/MissionListRequest.java @@ -1,6 +1,6 @@ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class MissionListRequest extends ObjectController{ @@ -9,7 +9,7 @@ public class MissionListRequest extends ObjectController{ private long terminalId; private byte tickCount; - public MissionListRequest(ByteBuffer data) { + public MissionListRequest(NetBuffer data) { super(CRC); } @@ -30,20 +30,20 @@ public class MissionListRequest extends ObjectController{ } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - data.get(); - setTickCount(data.get()); + data.getByte(); + setTickCount(data.getByte()); setTerminalId(data.getLong()); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 10); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 10); encodeHeader(data); - addByte(data, 0); - addByte(data, getTickCount()); - addLong(data, getTerminalId()); + data.addByte(0); + data.addByte(getTickCount()); + data.addLong(getTerminalId()); return data; } } \ No newline at end of file diff --git a/src/network/packets/swg/zone/object_controller/NextCraftingStage.java b/src/network/packets/swg/zone/object_controller/NextCraftingStage.java index 4904721c1..4f9fcc269 100644 --- a/src/network/packets/swg/zone/object_controller/NextCraftingStage.java +++ b/src/network/packets/swg/zone/object_controller/NextCraftingStage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class NextCraftingStage extends ObjectController{ @@ -44,26 +44,26 @@ public class NextCraftingStage extends ObjectController{ this.sequenceId = sequenceId; } - public NextCraftingStage(ByteBuffer data) { + public NextCraftingStage(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - requestId = getInt(data); - response = getInt(data); - sequenceId = getByte(data); + requestId = data.getInt(); + response = data.getInt(); + sequenceId = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 9); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 9); encodeHeader(data); - addInt(data, requestId); - addInt(data, response); - addByte(data, sequenceId); + data.addInt(requestId); + data.addInt(response); + data.addByte(sequenceId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/NextCraftingStageResult.java b/src/network/packets/swg/zone/object_controller/NextCraftingStageResult.java index 86e56a985..9e454666f 100644 --- a/src/network/packets/swg/zone/object_controller/NextCraftingStageResult.java +++ b/src/network/packets/swg/zone/object_controller/NextCraftingStageResult.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class NextCraftingStageResult extends ObjectController { @@ -44,26 +44,26 @@ public class NextCraftingStageResult extends ObjectController { this.sequenceId = sequenceId; } - public NextCraftingStageResult(ByteBuffer data) { + public NextCraftingStageResult(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - requestId = getInt(data); - response = getInt(data); - sequenceId = getByte(data); + requestId = data.getInt(); + response = data.getInt(); + sequenceId = data.getByte(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 9); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 9); encodeHeader(data); - addInt(data, requestId); - addInt(data, response); - addByte(data, sequenceId); + data.addInt(requestId); + data.addInt(response); + data.addByte(sequenceId); return data; } diff --git a/src/network/packets/swg/zone/object_controller/ObjectController.java b/src/network/packets/swg/zone/object_controller/ObjectController.java index 57f12e349..dd12e956c 100644 --- a/src/network/packets/swg/zone/object_controller/ObjectController.java +++ b/src/network/packets/swg/zone/object_controller/ObjectController.java @@ -27,9 +27,8 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; - import com.projectswg.common.debug.Log; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import network.packets.swg.zone.object_controller.combat.CombatAction; @@ -58,28 +57,30 @@ public abstract class ObjectController extends SWGPacket { this.update = 0x1B; } - protected final void decodeHeader(ByteBuffer data) { - if (!super.decode(data, CRC)) + protected final void decodeHeader(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - update = getInt(data); - if (getInt(data) != controllerCrc) + update = data.getInt(); + if (data.getInt() != controllerCrc) Log.e("Attempting to process invalid controller"); - objectId = getLong(data); - getInt(data); + objectId = data.getLong(); + data.getInt(); return; } - protected final void encodeHeader(ByteBuffer data) { - addShort(data, 5); - addInt( data, CRC); - addInt (data, update); - addInt( data, controllerCrc); - addLong( data, objectId); - addInt( data, 0); + protected final void encodeHeader(NetBuffer data) { + data.addShort(5); + data.addInt(CRC); + data.addInt(update); + data.addInt(controllerCrc); + data.addLong(objectId); + data.addInt(0); } - public abstract void decode(ByteBuffer data); - public abstract ByteBuffer encode(); + @Override + public abstract void decode(NetBuffer data); + @Override + public abstract NetBuffer encode(); public long getObjectId() { return objectId; } public int getUpdate() { return update; } @@ -87,10 +88,11 @@ public abstract class ObjectController extends SWGPacket { public void setUpdate(int update) { this.update = update; } - public static final ObjectController decodeController(ByteBuffer data) { + public static final ObjectController decodeController(NetBuffer data) { if (data.array().length < 14) return null; - int crc = data.getInt(10); + data.position(10); + int crc = data.getInt(); switch (crc) { case 0x0071: return new DataTransform(data); case 0x00CC: return new CombatAction(data); @@ -117,20 +119,20 @@ public abstract class ObjectController extends SWGPacket { private static class GenericObjectController extends ObjectController { - public GenericObjectController(int crc, ByteBuffer data) { + public GenericObjectController(int crc, NetBuffer data) { super(0, crc); decode(data); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH); encodeHeader(data); return data; } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); } } diff --git a/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java b/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java index e651b745c..9a23b58ac 100644 --- a/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java +++ b/src/network/packets/swg/zone/object_controller/ObjectMenuRequest.java @@ -27,9 +27,10 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; import java.util.List; +import com.projectswg.common.network.NetBuffer; + import resources.radial.RadialOption; import resources.radial.RadialOptionList; @@ -47,27 +48,27 @@ public class ObjectMenuRequest extends ObjectController { options = new RadialOptionList(); } - public ObjectMenuRequest(ByteBuffer data) { + public ObjectMenuRequest(NetBuffer data) { super(CRC); options = new RadialOptionList(); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - targetId = getLong(data); - requestorId = getLong(data); - options = getEncodable(data, RadialOptionList.class); - counter = getByte(data); + targetId = data.getLong(); + requestorId = data.getLong(); + options = data.getEncodable(RadialOptionList.class); + counter = data.getByte(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + options.getSize() + 17); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + options.getSize() + 17); encodeHeader(data); - addLong(data, targetId); - addLong(data, requestorId); - addEncodable(data, options); - addByte(data, counter); + data.addLong(targetId); + data.addLong(requestorId); + data.addEncodable(options); + data.addByte(counter); return data; } diff --git a/src/network/packets/swg/zone/object_controller/ObjectMenuResponse.java b/src/network/packets/swg/zone/object_controller/ObjectMenuResponse.java index 6620c7863..743e28480 100644 --- a/src/network/packets/swg/zone/object_controller/ObjectMenuResponse.java +++ b/src/network/packets/swg/zone/object_controller/ObjectMenuResponse.java @@ -27,9 +27,10 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; import java.util.List; +import com.projectswg.common.network.NetBuffer; + import resources.radial.RadialOption; import resources.radial.RadialOptionList; @@ -59,27 +60,27 @@ public class ObjectMenuResponse extends ObjectController { setCounter(counter); } - public ObjectMenuResponse(ByteBuffer data) { + public ObjectMenuResponse(NetBuffer data) { super(CRC); this.options = new RadialOptionList(); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - targetId = getLong(data); - requestorId = getLong(data); - options = getEncodable(data, RadialOptionList.class); - counter = getByte(data); + targetId = data.getLong(); + requestorId = data.getLong(); + options = data.getEncodable(RadialOptionList.class); + counter = data.getByte(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + options.getSize() + 17); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + options.getSize() + 17); encodeHeader(data); - addLong(data, targetId); - addLong(data, requestorId); - addEncodable(data, options); - addByte(data, counter); + data.addLong(targetId); + data.addLong(requestorId); + data.addEncodable(options); + data.addByte(counter); return data; } diff --git a/src/network/packets/swg/zone/object_controller/PlayerEmote.java b/src/network/packets/swg/zone/object_controller/PlayerEmote.java index ffe1d9289..a8171aabf 100644 --- a/src/network/packets/swg/zone/object_controller/PlayerEmote.java +++ b/src/network/packets/swg/zone/object_controller/PlayerEmote.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class PlayerEmote extends ObjectController { @@ -41,7 +41,7 @@ public class PlayerEmote extends ObjectController { super(objectId, CRC); } - public PlayerEmote(ByteBuffer data) { + public PlayerEmote(NetBuffer data) { super(CRC); decode(data); } @@ -60,23 +60,23 @@ public class PlayerEmote extends ObjectController { this.emoteId = emote.emoteId; } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - sourceId = getLong(data); - targetId = getLong(data); - emoteId = getShort(data); - getShort(data); // Should be 0 - getByte(data); // Should be 3 + sourceId = data.getLong(); + targetId = data.getLong(); + emoteId = data.getShort(); + data.getShort(); // Should be 0 + data.getByte(); // Should be 3 } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 21); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 21); encodeHeader(data); - addLong(data, sourceId); - addLong(data, targetId); - addShort(data, emoteId); - addShort(data, (short) 0); - addByte(data, (byte) 3); + data.addLong(sourceId); + data.addLong(targetId); + data.addShort(emoteId); + data.addShort((short) 0); + data.addByte((byte) 3); return data; } diff --git a/src/network/packets/swg/zone/object_controller/PostureUpdate.java b/src/network/packets/swg/zone/object_controller/PostureUpdate.java index a1095c0c9..116b400f9 100644 --- a/src/network/packets/swg/zone/object_controller/PostureUpdate.java +++ b/src/network/packets/swg/zone/object_controller/PostureUpdate.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import resources.Posture; @@ -42,22 +42,22 @@ public class PostureUpdate extends ObjectController { this.posture = posture; } - public PostureUpdate(ByteBuffer data) { + public PostureUpdate(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - posture = Posture.getFromId(getByte(data)); - getBoolean(data); // isClientImmediate + posture = Posture.getFromId(data.getByte()); + data.getBoolean(); // isClientImmediate } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 2); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 2); encodeHeader(data); - addByte(data, posture.getId()); - addBoolean(data, true); // isClientImmediate + data.addByte(posture.getId()); + data.addBoolean(true); // isClientImmediate return data; } diff --git a/src/network/packets/swg/zone/object_controller/ShowFlyText.java b/src/network/packets/swg/zone/object_controller/ShowFlyText.java index 52b0f41da..767aaf608 100644 --- a/src/network/packets/swg/zone/object_controller/ShowFlyText.java +++ b/src/network/packets/swg/zone/object_controller/ShowFlyText.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; @@ -73,34 +72,33 @@ public class ShowFlyText extends ObjectController { setDisplayFlag(flags); } - public ShowFlyText(ByteBuffer data) { + public ShowFlyText(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - getLong(data); - text = getEncodable(data, StringId.class); - oob = getEncodable(data, OutOfBandPackage.class); - scale = getFloat(data); - rgb = getEncodable(data, RGB.class); - display = Flag.getFlyFlags(getInt(data)); + data.getLong(); + text = data.getEncodable(StringId.class); + oob = data.getEncodable(OutOfBandPackage.class); + scale = data.getFloat(); + rgb = data.getEncodable(RGB.class); + display = Flag.getFlyFlags(data.getInt()); } @Override - public ByteBuffer encode() { - byte [] oobRaw = oob.encode(); - NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 27 + text.getFile().length() + text.getKey().length() + oobRaw.length); - encodeHeader(data.getBuffer()); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 27 + text.getFile().length() + text.getKey().length() + oob.getLength()); + encodeHeader(data); data.addLong(getObjectId()); data.addEncodable(text); - data.addRawArray(oobRaw); + data.addEncodable(oob); data.addFloat((float) scale); data.addEncodable(rgb); data.addInt(getDisplayBitmask()); - return data.getBuffer(); + return data; } public StringId getText() { diff --git a/src/network/packets/swg/zone/object_controller/ShowLootBox.java b/src/network/packets/swg/zone/object_controller/ShowLootBox.java index 334cb2ab4..2488c2b01 100644 --- a/src/network/packets/swg/zone/object_controller/ShowLootBox.java +++ b/src/network/packets/swg/zone/object_controller/ShowLootBox.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; - import com.projectswg.common.network.NetBuffer; public class ShowLootBox extends ObjectController { @@ -42,13 +40,13 @@ public class ShowLootBox extends ObjectController { this.items = items; } - public ShowLootBox(ByteBuffer data) { + public ShowLootBox(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); int itemCount = data.getInt(); @@ -60,17 +58,17 @@ public class ShowLootBox extends ObjectController { } @Override - public ByteBuffer encode() { - NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + Integer.BYTES + items.length * Long.BYTES); - encodeHeader(data.getBuffer()); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 4 + items.length * 8); + encodeHeader(data); + data.addInt(items.length); - - for(long objectId : items) { + for (long objectId : items) { data.addLong(objectId); } - return data.getBuffer(); + return data; } } diff --git a/src/network/packets/swg/zone/object_controller/SitOnObject.java b/src/network/packets/swg/zone/object_controller/SitOnObject.java index 17d2b8ce1..4f13bbdf0 100644 --- a/src/network/packets/swg/zone/object_controller/SitOnObject.java +++ b/src/network/packets/swg/zone/object_controller/SitOnObject.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class SitOnObject extends ObjectController { @@ -42,7 +42,7 @@ public class SitOnObject extends ObjectController { super(objectId, CRC); } - public SitOnObject(ByteBuffer data) { + public SitOnObject(NetBuffer data) { super(CRC); decode(data); } @@ -64,22 +64,22 @@ public class SitOnObject extends ObjectController { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - cellId = getLong(data); - x = getFloat(data); - z = getFloat(data); - y = getFloat(data); + cellId = data.getLong(); + x = data.getFloat(); + z = data.getFloat(); + y = data.getFloat(); } @Override - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + 20); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 20); encodeHeader(data); - addLong(data, cellId); - addFloat(data, x); - addFloat(data, z); - addFloat(data, y); + data.addLong(cellId); + data.addFloat(x); + data.addFloat(z); + data.addFloat(y); return data; } diff --git a/src/network/packets/swg/zone/object_controller/SpatialChat.java b/src/network/packets/swg/zone/object_controller/SpatialChat.java index 6d24e17c9..7f318d741 100644 --- a/src/network/packets/swg/zone/object_controller/SpatialChat.java +++ b/src/network/packets/swg/zone/object_controller/SpatialChat.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; public class SpatialChat extends ObjectController { @@ -70,39 +70,39 @@ public class SpatialChat extends ObjectController { this.sourceName = chat.sourceName; } - public SpatialChat(ByteBuffer data) { + public SpatialChat(NetBuffer data) { super(CRC); decode(data); } - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - sourceId = getLong(data); - targetId = getLong(data); - text = getUnicode(data); - getInt(data); - balloonSize = getShort(data); - balloonType = getShort(data); - moodId = getShort(data); - languageId = getByte(data); - outOfBand = getUnicode(data); - sourceName = getUnicode(data); + sourceId = data.getLong(); + targetId = data.getLong(); + text = data.getUnicode(); + data.getInt(); + balloonSize = data.getShort(); + balloonType = data.getShort(); + moodId = data.getShort(); + languageId = data.getByte(); + outOfBand = data.getUnicode(); + sourceName = data.getUnicode(); } - public ByteBuffer encode() { + public NetBuffer encode() { int length = 39 + text.length()*2 + outOfBand.length()*2 + sourceName.length()*2; - ByteBuffer data = ByteBuffer.allocate(HEADER_LENGTH + length); + NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + length); encodeHeader(data); - addLong(data, sourceId); - addLong(data, targetId); - addUnicode(data, text); - addInt(data, 0); // flags - addShort(data, balloonSize); - addShort(data, balloonType); - addShort(data, moodId); - addByte(data, languageId); // languageId - addUnicode(data, outOfBand); - addUnicode(data, sourceName); + data.addLong(sourceId); + data.addLong(targetId); + data.addUnicode(text); + data.addInt(0); // flags + data.addShort(balloonSize); + data.addShort(balloonType); + data.addShort(moodId); + data.addByte(languageId); // languageId + data.addUnicode(outOfBand); + data.addUnicode(sourceName); return data; } diff --git a/src/network/packets/swg/zone/object_controller/combat/CombatAction.java b/src/network/packets/swg/zone/object_controller/combat/CombatAction.java index 500ffe4af..41c7d272b 100644 --- a/src/network/packets/swg/zone/object_controller/combat/CombatAction.java +++ b/src/network/packets/swg/zone/object_controller/combat/CombatAction.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller.combat; -import java.nio.ByteBuffer; import java.util.HashSet; import java.util.Set; @@ -61,44 +60,44 @@ public class CombatAction extends ObjectController { defenders = new HashSet<>(); } - public CombatAction(ByteBuffer data) { + public CombatAction(NetBuffer data) { super(CRC); defenders = new HashSet<>(); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - actionCrc = getInt(data); - attackerId = getLong(data); - weaponId = getLong(data); - posture = Posture.getFromId(getByte(data)); - trail = TrailLocation.getTrailLocation(getByte(data)); - clientEffectId = getByte(data); - commandCrc = getInt(data); - useLocation = getBoolean(data); + actionCrc = data.getInt(); + attackerId = data.getLong(); + weaponId = data.getLong(); + posture = Posture.getFromId(data.getByte()); + trail = TrailLocation.getTrailLocation(data.getByte()); + clientEffectId = data.getByte(); + commandCrc = data.getInt(); + useLocation = data.getBoolean(); if (useLocation) { - position = getEncodable(data, Point3D.class); - cell = getLong(data); + position = data.getEncodable(Point3D.class); + cell = data.getLong(); } - int count = getShort(data); + int count = data.getShort(); for (int i = 0; i < count; i++) { Defender d = new Defender(); - d.setCreatureId(getLong(data)); - d.setPosture(Posture.getFromId(getByte(data))); - d.setDefense(getBoolean(data)); - d.setClientEffectId(getByte(data)); - d.setHitLocation(HitLocation.getHitLocation(getByte(data))); - d.setDamage(getShort(data)); + d.setCreatureId(data.getLong()); + d.setPosture(Posture.getFromId(data.getByte())); + d.setDefense(data.getBoolean()); + d.setClientEffectId(data.getByte()); + d.setHitLocation(HitLocation.getHitLocation(data.getByte())); + d.setDamage(data.getShort()); defenders.add(d); } } @Override - public ByteBuffer encode() { + public NetBuffer encode() { NetBuffer data = NetBuffer.allocate(HEADER_LENGTH + 30 + defenders.size() * 14 + (useLocation ? 20 : 0)); - encodeHeader(data.getBuffer()); + encodeHeader(data); data.addInt(actionCrc); data.addLong(attackerId); data.addLong(weaponId); @@ -120,7 +119,7 @@ public class CombatAction extends ObjectController { data.addByte(d.getHitLocation().getNum()); data.addShort(d.getDamage()); } - return data.getBuffer(); + return data; } public int getActionCrc() { diff --git a/src/network/packets/swg/zone/object_controller/combat/CombatSpam.java b/src/network/packets/swg/zone/object_controller/combat/CombatSpam.java index 809415665..6f140c87c 100644 --- a/src/network/packets/swg/zone/object_controller/combat/CombatSpam.java +++ b/src/network/packets/swg/zone/object_controller/combat/CombatSpam.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package network.packets.swg.zone.object_controller.combat; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Point3D; import com.projectswg.common.network.NetBuffer; @@ -60,66 +58,66 @@ public class CombatSpam extends ObjectController { super(objectId, CRC); } - public CombatSpam(ByteBuffer data) { + public CombatSpam(NetBuffer data) { super(CRC); decode(data); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); info = new AttackInfo(); - dataType = getByte(data); - attacker = getLong(data); - attackerPosition = getEncodable(data, Point3D.class); - defender = getLong(data); - defenderPosition = getEncodable(data, Point3D.class); + dataType = data.getByte(); + attacker = data.getLong(); + attackerPosition = data.getEncodable(Point3D.class); + defender = data.getLong(); + defenderPosition = data.getEncodable(Point3D.class); if (isAttackDataWeaponObject(dataType) || isAttackWeaponName(dataType)) { if (isAttackDataWeaponObject(dataType)) - weapon = getLong(data); + weapon = data.getLong(); else - weaponName = getEncodable(data, StringId.class); - attackName = getEncodable(data, StringId.class); - info.setSuccess(getBoolean(data)); + weaponName = data.getEncodable(StringId.class); + attackName = data.getEncodable(StringId.class); + info.setSuccess(data.getBoolean()); if (info.isSuccess()) { - info.setArmor(getLong(data)); - info.setRawDamage(getInt(data)); - info.setDamageType(DamageType.getDamageType(getInt(data))); - info.setElementalDamage(getInt(data)); - info.setElementalDamageType(DamageType.getDamageType(getInt(data))); - info.setBleedDamage(getInt(data)); - info.setCriticalDamage(getInt(data)); - info.setBlockedDamage(getInt(data)); - info.setFinalDamage(getInt(data)); - info.setHitLocation(HitLocation.getHitLocation(getInt(data))); - info.setCrushing(getBoolean(data)); - info.setStrikethrough(getBoolean(data)); - info.setStrikethroughAmount(getFloat(data)); - info.setEvadeResult(getBoolean(data)); - info.setEvadeAmount(getFloat(data)); - info.setBlockResult(getBoolean(data)); - info.setBlock(getInt(data)); + info.setArmor(data.getLong()); + info.setRawDamage(data.getInt()); + info.setDamageType(DamageType.getDamageType(data.getInt())); + info.setElementalDamage(data.getInt()); + info.setElementalDamageType(DamageType.getDamageType(data.getInt())); + info.setBleedDamage(data.getInt()); + info.setCriticalDamage(data.getInt()); + info.setBlockedDamage(data.getInt()); + info.setFinalDamage(data.getInt()); + info.setHitLocation(HitLocation.getHitLocation(data.getInt())); + info.setCrushing(data.getBoolean()); + info.setStrikethrough(data.getBoolean()); + info.setStrikethroughAmount(data.getFloat()); + info.setEvadeResult(data.getBoolean()); + info.setEvadeAmount(data.getFloat()); + info.setBlockResult(data.getBoolean()); + info.setBlock(data.getInt()); } else { - info.setDodge(getBoolean(data)); - info.setParry(getBoolean(data)); + info.setDodge(data.getBoolean()); + info.setParry(data.getBoolean()); } } else { - // spamMessage = getUnicode(data); - getInt(data); + // spamMessage = data.getUnicode(); + data.getInt(); } - info.setCritical(getBoolean(data)); - info.setGlancing(getBoolean(data)); - info.setProc(getBoolean(data)); - spamType = getInt(data); + info.setCritical(data.getBoolean()); + info.setGlancing(data.getBoolean()); + info.setProc(data.getBoolean()); + spamType = data.getInt(); if (isMessageData(dataType)) { // Extra stuff? } } @Override - public ByteBuffer encode() { + public NetBuffer encode() { NetBuffer data = NetBuffer.allocate(getEncodeSize()); - encodeHeader(data.getBuffer()); + encodeHeader(data); data.addByte(dataType); data.addLong(attacker); data.addEncodable(attackerPosition); @@ -161,7 +159,7 @@ public class CombatSpam extends ObjectController { data.addBoolean(info.isGlancing()); data.addBoolean(info.isProc()); data.addInt(spamType); - return data.getBuffer(); + return data; } private int getEncodeSize() { diff --git a/src/network/packets/swg/zone/resource/ResourceWeight.java b/src/network/packets/swg/zone/resource/ResourceWeight.java index 43c78e2fc..6346b135d 100644 --- a/src/network/packets/swg/zone/resource/ResourceWeight.java +++ b/src/network/packets/swg/zone/resource/ResourceWeight.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package network.packets.swg.zone.resource; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -35,6 +34,7 @@ import java.util.Map; import java.util.Map.Entry; import com.projectswg.common.debug.Assert; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.zone.object_controller.ObjectController; @@ -54,55 +54,55 @@ public class ResourceWeight extends ObjectController { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { decodeHeader(data); - schematicId = getInt(data); - schematicCrc = getInt(data); - int count = getByte(data); + schematicId = data.getInt(); + schematicCrc = data.getInt(); + int count = data.getByte(); decodeWeights(data, attributes, count); decodeWeights(data, resourceMaxWeights, count); Assert.test(attributes.size() == resourceMaxWeights.size()); } @Override - public ByteBuffer encode() { + public NetBuffer encode() { int len = HEADER_LENGTH + 9; for (List weights : attributes.values()) len += 3 + weights.size(); for (List weights : resourceMaxWeights.values()) len += 3 + weights.size(); Assert.test(attributes.size() == resourceMaxWeights.size()); - ByteBuffer data = ByteBuffer.allocate(len); + NetBuffer data = NetBuffer.allocate(len); encodeHeader(data); encodeWeights(data, attributes); encodeWeights(data, resourceMaxWeights); - addInt(data, attributes.size()); + data.addInt(attributes.size()); return data; } - private void decodeWeights(ByteBuffer data, Map> map, int count) { + private void decodeWeights(NetBuffer data, Map> map, int count) { for (int i = 0; i < count; i++) { - getByte(data); // index - int slot = getByte(data); - int weightCount = getByte(data); + data.getByte(); // index + int slot = data.getByte(); + int weightCount = data.getByte(); List weights = new ArrayList<>(); map.put(slot, weights); for (int j = 0; j < weightCount; j++) { - byte b = getByte(data); + byte b = data.getByte(); weights.add(new Weight((b & 0xF0) >>> 4, b & 0x0F)); } } } - private void encodeWeights(ByteBuffer data, Map> map) { + private void encodeWeights(NetBuffer data, Map> map) { int i = 0; for (Entry> e : map.entrySet()) { List weights = e.getValue(); - addByte(data, i++); - addByte(data, e.getKey()); - addByte(data, weights.size()); + data.addByte(i++); + data.addByte(e.getKey()); + data.addByte(weights.size()); for (Weight w : weights) { - addByte(data, (w.getResourceId() << 4) | w.getWeight()); + data.addByte((w.getResourceId() << 4) | w.getWeight()); } } } diff --git a/src/network/packets/swg/zone/server_ui/SuiCreatePageMessage.java b/src/network/packets/swg/zone/server_ui/SuiCreatePageMessage.java index 9e31f0d59..a3e71a241 100644 --- a/src/network/packets/swg/zone/server_ui/SuiCreatePageMessage.java +++ b/src/network/packets/swg/zone/server_ui/SuiCreatePageMessage.java @@ -27,12 +27,13 @@ ***********************************************************************************/ package network.packets.swg.zone.server_ui; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; import resources.sui.SuiBaseWindow; public class SuiCreatePageMessage extends SWGPacket { + public static final int CRC = getCrc("SuiCreatePageMessage"); private SuiBaseWindow window; @@ -43,22 +44,23 @@ public class SuiCreatePageMessage extends SWGPacket { this.window = window; } - public SuiCreatePageMessage(ByteBuffer data) { + public SuiCreatePageMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + @Override + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - window = getEncodable(data, SuiBaseWindow.class); + window = data.getEncodable(SuiBaseWindow.class); } - public ByteBuffer encode() { - byte[] windowData = window.encode(); - ByteBuffer data = ByteBuffer.allocate(6 + windowData.length); - addShort(data, 2); - addInt( data, CRC); - addData(data, windowData); + @Override + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(6 + window.getLength()); + data.addShort(2); + data.addInt(CRC); + data.addEncodable(window); return data; } diff --git a/src/network/packets/swg/zone/server_ui/SuiEventNotification.java b/src/network/packets/swg/zone/server_ui/SuiEventNotification.java index df1f60e21..0d38e37ac 100644 --- a/src/network/packets/swg/zone/server_ui/SuiEventNotification.java +++ b/src/network/packets/swg/zone/server_ui/SuiEventNotification.java @@ -27,10 +27,11 @@ ***********************************************************************************/ package network.packets.swg.zone.server_ui; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; public class SuiEventNotification extends SWGPacket { @@ -45,38 +46,38 @@ public class SuiEventNotification extends SWGPacket { subscribedToProperties = new ArrayList<>(); } - public SuiEventNotification(ByteBuffer data) { + public SuiEventNotification(NetBuffer data) { this(); decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - windowId = getInt(data); - eventIndex = getInt(data); - int size = getInt(data); - updateCount = getInt(data); + windowId = data.getInt(); + eventIndex = data.getInt(); + int size = data.getInt(); + updateCount = data.getInt(); for (int i = 0; i < size; i++) { - subscribedToProperties.add(getUnicode(data)); + subscribedToProperties.add(data.getUnicode()); } } - public ByteBuffer encode() { + public NetBuffer encode() { int size = 0; for (String property : subscribedToProperties) { size += 4 + (property.length() * 2); } - ByteBuffer bb = ByteBuffer.allocate(size + 16); - addInt(bb, windowId); - addInt(bb, eventIndex); - addInt(bb, subscribedToProperties.size()); - addInt(bb, updateCount); + NetBuffer data = NetBuffer.allocate(size + 16); + data.addInt(windowId); + data.addInt(eventIndex); + data.addInt(subscribedToProperties.size()); + data.addInt(updateCount); for (String property : subscribedToProperties) { - addUnicode(bb, property); + data.addUnicode(property); } - return bb; + return data; } public int getWindowId() { return this.windowId; } diff --git a/src/network/packets/swg/zone/server_ui/SuiForceClosePage.java b/src/network/packets/swg/zone/server_ui/SuiForceClosePage.java index 1b13ecf83..af04c6d59 100644 --- a/src/network/packets/swg/zone/server_ui/SuiForceClosePage.java +++ b/src/network/packets/swg/zone/server_ui/SuiForceClosePage.java @@ -27,7 +27,7 @@ package network.packets.swg.zone.server_ui; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -46,19 +46,19 @@ public class SuiForceClosePage extends SWGPacket { public SuiForceClosePage() {} @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - windowId = getInt(data); + windowId = data.getInt(); } @Override - public ByteBuffer encode() { - ByteBuffer bb = ByteBuffer.allocate(10); - addShort(bb, 1); - addInt(bb, CRC); - addInt(bb, windowId); - return bb; + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(10); + data.addShort(1); + data.addInt(CRC); + data.addInt(windowId); + return data; } public int getWindowId() { diff --git a/src/network/packets/swg/zone/spatial/AttributeListMessage.java b/src/network/packets/swg/zone/spatial/AttributeListMessage.java index 5d51db8a9..ed375ef17 100644 --- a/src/network/packets/swg/zone/spatial/AttributeListMessage.java +++ b/src/network/packets/swg/zone/spatial/AttributeListMessage.java @@ -27,11 +27,12 @@ ***********************************************************************************/ package network.packets.swg.zone.spatial; -import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; public class AttributeListMessage extends SWGPacket { @@ -49,40 +50,40 @@ public class AttributeListMessage extends SWGPacket { this.attributes = attributes; } - public AttributeListMessage(ByteBuffer data) { + public AttributeListMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - objectId = getLong(data); - getAscii(data); // static item name - int count = getInt(data); + objectId = data.getLong(); + data.getAscii(); // static item name + int count = data.getInt(); for (int i = 0; i < count; i++) { - String name = getAscii(data); - String attr = getUnicode(data); + String name = data.getAscii(); + String attr = data.getUnicode(); attributes.put(name, attr); } - getInt(data); + data.getInt(); } - public ByteBuffer encode() { + public NetBuffer encode() { int size = 0; for (Entry e : attributes.entrySet()) { size += 6 + e.getKey().length() + (e.getValue().length() * 2); } - ByteBuffer data = ByteBuffer.allocate(24 + size); - addShort(data, 3); - addInt (data, CRC); - addLong (data, objectId); - addShort(data, 0); - addInt (data, attributes.size()); + NetBuffer data = NetBuffer.allocate(24 + size); + data.addShort(3); + data.addInt(CRC); + data.addLong(objectId); + data.addShort(0); + data.addInt(attributes.size()); for (Entry e : attributes.entrySet()) { - addAscii(data, e.getKey()); - addUnicode(data, e.getValue()); + data.addAscii(e.getKey()); + data.addUnicode(e.getValue()); } - addInt (data, 0); + data.addInt(0); return data; } diff --git a/src/network/packets/swg/zone/spatial/GetMapLocationsMessage.java b/src/network/packets/swg/zone/spatial/GetMapLocationsMessage.java index f382ff9a0..31c69549a 100644 --- a/src/network/packets/swg/zone/spatial/GetMapLocationsMessage.java +++ b/src/network/packets/swg/zone/spatial/GetMapLocationsMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.spatial; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -42,23 +42,23 @@ public class GetMapLocationsMessage extends SWGPacket { public GetMapLocationsMessage() { } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - planet = getAscii(data); - versionStatic = getInt(data); - versionDynamic = getInt(data); - versionPersist = getInt(data); + planet = data.getAscii(); + versionStatic = data.getInt(); + versionDynamic = data.getInt(); + versionPersist = data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(19 + planet.length()); - addShort(data, 28); - addInt (data, CRC); - addAscii(data, planet); - addInt(data, versionStatic); - addInt(data, versionDynamic); - addInt(data, versionPersist); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(19 + planet.length()); + data.addShort(28); + data.addInt(CRC); + data.addAscii(planet); + data.addInt(versionStatic); + data.addInt(versionDynamic); + data.addInt(versionPersist); return data; } diff --git a/src/network/packets/swg/zone/spatial/GetMapLocationsResponseMessage.java b/src/network/packets/swg/zone/spatial/GetMapLocationsResponseMessage.java index 142d11489..70ebfd89b 100644 --- a/src/network/packets/swg/zone/spatial/GetMapLocationsResponseMessage.java +++ b/src/network/packets/swg/zone/spatial/GetMapLocationsResponseMessage.java @@ -27,10 +27,10 @@ ***********************************************************************************/ package network.packets.swg.zone.spatial; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.util.List; +import com.projectswg.common.network.NetBuffer; + import network.packets.swg.SWGPacket; import services.map.MapLocation; @@ -62,20 +62,20 @@ public class GetMapLocationsResponseMessage extends SWGPacket { } @Override - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - planet = getAscii(data); - updatedStaticLocations = getList(data, MapLocation.class); - updatedDynamicLocations = getList(data, MapLocation.class); - updatedPersistLocations = getList(data, MapLocation.class); - staticLocVersion = getInt(data); - dynamicLocVersion = getInt(data); - persistentLocVersion = getInt(data); + planet = data.getAscii(); + updatedStaticLocations = data.getList(MapLocation.class); + updatedDynamicLocations = data.getList(MapLocation.class); + updatedPersistLocations = data.getList(MapLocation.class); + staticLocVersion = data.getInt(); + dynamicLocVersion = data.getInt(); + persistentLocVersion = data.getInt(); } @Override - public ByteBuffer encode() { + public NetBuffer encode() { int size = planet.length() + 34; // Get size of data @@ -101,19 +101,19 @@ public class GetMapLocationsResponseMessage extends SWGPacket { } // Create the packet - ByteBuffer data = ByteBuffer.allocate(size).order(ByteOrder.LITTLE_ENDIAN); - addShort(data, 8); - addInt(data, CRC); + NetBuffer data = NetBuffer.allocate(size); + data.addShort(8); + data.addInt(CRC); - addAscii(data, planet); + data.addAscii(planet); - addList(data, updatedStaticLocations); - addList(data, updatedDynamicLocations); - addList(data, updatedPersistLocations); + data.addList(updatedStaticLocations); + data.addList(updatedDynamicLocations); + data.addList(updatedPersistLocations); - addInt(data, staticLocVersion); - addInt(data, dynamicLocVersion); - addInt(data, persistentLocVersion); + data.addInt(staticLocVersion); + data.addInt(dynamicLocVersion); + data.addInt(persistentLocVersion); return data; } diff --git a/src/network/packets/swg/zone/spatial/NewTicketActivityResponseMessage.java b/src/network/packets/swg/zone/spatial/NewTicketActivityResponseMessage.java index 6ac489fa0..b8e87c88e 100644 --- a/src/network/packets/swg/zone/spatial/NewTicketActivityResponseMessage.java +++ b/src/network/packets/swg/zone/spatial/NewTicketActivityResponseMessage.java @@ -27,7 +27,7 @@ ***********************************************************************************/ package network.packets.swg.zone.spatial; -import java.nio.ByteBuffer; +import com.projectswg.common.network.NetBuffer; import network.packets.swg.SWGPacket; @@ -38,23 +38,23 @@ public class NewTicketActivityResponseMessage extends SWGPacket { } - public NewTicketActivityResponseMessage(ByteBuffer data) { + public NewTicketActivityResponseMessage(NetBuffer data) { decode(data); } - public void decode(ByteBuffer data) { - if (!super.decode(data, CRC)) + public void decode(NetBuffer data) { + if (!super.checkDecode(data, CRC)) return; - getByte(data); - getInt(data); + data.getByte(); + data.getInt(); } - public ByteBuffer encode() { - ByteBuffer data = ByteBuffer.allocate(11); - addShort(data, 2); - addInt (data, CRC); - addByte (data, 0); - addInt (data, 1); + public NetBuffer encode() { + NetBuffer data = NetBuffer.allocate(11); + data.addShort(2); + data.addInt(CRC); + data.addByte(0); + data.addInt(1); return data; } diff --git a/src/resources/SkillMod.java b/src/resources/SkillMod.java index 73bb7ae57..2ab5cdbde 100644 --- a/src/resources/SkillMod.java +++ b/src/resources/SkillMod.java @@ -27,10 +27,8 @@ ***********************************************************************************/ package resources; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; @@ -49,20 +47,25 @@ public class SkillMod implements Encodable, Persistable { @Override public byte[] encode() { - ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES * 2).order(ByteOrder.LITTLE_ENDIAN); + NetBuffer data = NetBuffer.allocate(8); - buffer.putInt(base); - buffer.putInt(modifier); + data.addInt(base); + data.addInt(modifier); - return buffer.array(); + return data.array(); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { base = data.getInt(); modifier = data.getInt(); } + @Override + public int getLength() { + return 8; + } + @Override public void save(NetBufferStream stream) { stream.addInt(base); @@ -87,6 +90,7 @@ public class SkillMod implements Encodable, Persistable { return base + modifier; } + @Override public String toString() { return "SkillMod[Base="+base+", Modifier="+modifier+"]"; } diff --git a/src/resources/chat/ChatAvatar.java b/src/resources/chat/ChatAvatar.java index 3d8ab9ea2..d0cd93089 100644 --- a/src/resources/chat/ChatAvatar.java +++ b/src/resources/chat/ChatAvatar.java @@ -26,7 +26,6 @@ ******************************************************************************/ package resources.chat; -import java.nio.ByteBuffer; import java.util.Locale; import com.projectswg.common.encoding.CachedEncode; @@ -77,14 +76,14 @@ public class ChatAvatar implements Encodable, Persistable { } private byte [] encodeImpl() { - NetBuffer buffer = NetBuffer.allocate(getSize()); + NetBuffer buffer = NetBuffer.allocate(getLength()); buffer.addAscii("SWG"); buffer.addAscii(getCoreGalaxy()); buffer.addAscii(name); return buffer.array(); } - public int getSize() { + public int getLength() { return 9 + name.length() + getCoreGalaxy().length(); } @@ -94,8 +93,7 @@ public class ChatAvatar implements Encodable, Persistable { } @Override - public void decode(ByteBuffer bb) { - NetBuffer data = NetBuffer.wrap(bb); + public void decode(NetBuffer data) { data.getAscii(); // SWG data.getAscii(); name = data.getAscii().toLowerCase(Locale.US); diff --git a/src/resources/chat/ChatRoom.java b/src/resources/chat/ChatRoom.java index 2c6f09dde..0990c69a2 100644 --- a/src/resources/chat/ChatRoom.java +++ b/src/resources/chat/ChatRoom.java @@ -26,15 +26,15 @@ ******************************************************************************/ package resources.chat; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; +import com.projectswg.common.encoding.CachedEncode; import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; -import network.packets.Packet; import network.packets.swg.SWGPacket; import network.packets.swg.zone.chat.ChatRoomMessage; import resources.encodables.OutOfBandPackage; @@ -42,6 +42,8 @@ import services.player.PlayerManager; public class ChatRoom implements Encodable, Persistable { + private final CachedEncode cache; + private int id; private int type; private String path; @@ -56,11 +58,8 @@ public class ChatRoom implements Encodable, Persistable { // as each player will automatically re-join the room based on their joined channels list private transient List members; - // Large amount of data that's sent frequently, best if we can pre-encode everything and save it for later - private transient boolean modified = true; - private transient byte[] data; - public ChatRoom() { + this.cache = new CachedEncode(() -> encodeImpl()); owner = new ChatAvatar(); creator = new ChatAvatar(); moderators = new ArrayList<>(); @@ -72,154 +71,170 @@ public class ChatRoom implements Encodable, Persistable { public int getId() { return id; } - + public void setId(int id) { + this.cache.clearCached(); this.id = id; } - + public int getType() { return type; } - + public void setType(int type) { + this.cache.clearCached(); this.type = type; } - + public String getPath() { return path; } - + public void setPath(String path) { + this.cache.clearCached(); this.path = path; } - + public ChatAvatar getOwner() { return owner; } - + public void setOwner(ChatAvatar owner) { + this.cache.clearCached(); this.owner = owner; } - + public ChatAvatar getCreator() { return creator; } - + public void setCreator(ChatAvatar creator) { + this.cache.clearCached(); this.creator = creator; } - + public String getTitle() { return title; } - + public void setTitle(String title) { + this.cache.clearCached(); this.title = title; } - + public List getModerators() { return moderators; } - + public List getInvited() { return invited; } - + public boolean isModerated() { return moderated; } - + public void setModerated(boolean moderated) { + this.cache.clearCached(); this.moderated = moderated; } - + public List getMembers() { return members; } - + public boolean isPublic() { return type == 0; } - + public void setIsPublic(boolean isPublic) { + this.cache.clearCached(); this.type = (isPublic ? 0 : 1); } - + public List getBanned() { return banned; } - + public ChatResult canJoinRoom(ChatAvatar avatar, boolean ignoreInvitation) { if (banned.contains(avatar)) return ChatResult.ROOM_AVATAR_BANNED; - + if (members.contains(avatar)) return ChatResult.ROOM_ALREADY_JOINED; - + if (isPublic() || ignoreInvitation || invited.contains(avatar) || moderators.contains(avatar)) return ChatResult.SUCCESS; - + return ChatResult.ROOM_AVATAR_NO_PERMISSION; } - + public ChatResult canSendMessage(ChatAvatar avatar) { if (banned.contains(avatar)) return ChatResult.ROOM_AVATAR_BANNED; - + if (moderated && !moderators.contains(avatar)) return ChatResult.CUSTOM_FAILURE; - + return ChatResult.SUCCESS; } - + public boolean isModerator(ChatAvatar avatar) { return avatar.equals(owner) || moderators.contains(avatar); } - + public boolean isMember(ChatAvatar avatar) { return members.contains(avatar); } - + public boolean isBanned(ChatAvatar avatar) { return banned.contains(avatar); } - + public boolean isInvited(ChatAvatar avatar) { return invited.contains(avatar); } - + public boolean addMember(ChatAvatar avatar) { + this.cache.clearCached(); return members.add(avatar); } - + public boolean removeMember(ChatAvatar avatar) { + this.cache.clearCached(); return members.remove(avatar); } - + public boolean addModerator(ChatAvatar avatar) { + this.cache.clearCached(); return moderators.add(avatar); } - + public boolean removeModerator(ChatAvatar avatar) { + this.cache.clearCached(); return moderators.remove(avatar); } - + public boolean addInvited(ChatAvatar avatar) { + this.cache.clearCached(); return invited.add(avatar); } - + public boolean removeInvited(ChatAvatar avatar) { + this.cache.clearCached(); return invited.remove(avatar); } - + public boolean addBanned(ChatAvatar avatar) { + this.cache.clearCached(); return banned.add(avatar); } - + public boolean removeBanned(ChatAvatar avatar) { + this.cache.clearCached(); return banned.remove(avatar); } - + public void sendMessage(ChatAvatar sender, String message, OutOfBandPackage oob, PlayerManager playerManager) { ChatRoomMessage chatRoomMessage = new ChatRoomMessage(sender, getId(), message, oob); for (ChatAvatar member : members) { @@ -229,69 +244,59 @@ public class ChatRoom implements Encodable, Persistable { member.getPlayer().sendPacket(chatRoomMessage); } } - + public void sendPacketToMembers(PlayerManager manager, SWGPacket... packets) { for (ChatAvatar member : members) { member.getPlayer().sendPacket(packets); } } - + @Override - public void decode(ByteBuffer data) { - id = Packet.getInt(data); - type = Packet.getInt(data); - moderated = Packet.getBoolean(data); - path = Packet.getAscii(data); - owner = Packet.getEncodable(data, ChatAvatar.class); - creator = Packet.getEncodable(data, ChatAvatar.class); - title = Packet.getUnicode(data); - moderators = Packet.getList(data, ChatAvatar.class); - invited = Packet.getList(data, ChatAvatar.class); + public void decode(NetBuffer data) { + id = data.getInt(); + type = data.getInt(); + moderated = data.getBoolean(); + path = data.getAscii(); + owner = data.getEncodable(ChatAvatar.class); + creator = data.getEncodable(ChatAvatar.class); + title = data.getUnicode(); + moderators = data.getList(ChatAvatar.class); + invited = data.getList(ChatAvatar.class); } - + @Override public byte[] encode() { - if (!modified && data != null) - return data; - - int avatarIdSize = 0; // The encode method for ChatAvatar saves the encode result if the class was modified/null data - for (ChatAvatar moderator : moderators) { - avatarIdSize += moderator.encode().length; - } - - for (ChatAvatar invitee : invited) { - avatarIdSize += invitee.encode().length; - } - avatarIdSize += owner.encode().length + creator.encode().length; - - ByteBuffer bb = ByteBuffer.allocate(23 + path.length() + (title.length() * 2) + avatarIdSize); - Packet.addInt(bb, id); - Packet.addInt(bb, type); - Packet.addBoolean(bb, moderated); - Packet.addAscii(bb, path); - Packet.addEncodable(bb, owner); - Packet.addEncodable(bb, creator); - Packet.addUnicode(bb, title); - Packet.addList(bb, moderators); - Packet.addList(bb, invited); - - data = bb.array(); - modified = false; - - return data; + return cache.encode(); } - /* - private int id; - private int type; - private String path; - private ChatAvatar owner; - private ChatAvatar creator; - private String title; - private List moderators; - private List invited; - private boolean moderated; // No one but moderators can talk - private List banned; - */ + + private byte[] encodeImpl() { + NetBuffer data = NetBuffer.allocate(getLength()); + data.addInt(id); + data.addInt(type); + data.addBoolean(moderated); + data.addAscii(path); + data.addEncodable(owner); + data.addEncodable(creator); + data.addUnicode(title); + data.addList(moderators); + data.addList(invited); + return data.array(); + } + + public int getLength() { + int avatarIdSize = 0; // The encode method for ChatAvatar saves the encode result if the class was modified/null data + + for (ChatAvatar moderator : moderators) { + avatarIdSize += moderator.getLength(); + } + for (ChatAvatar invitee : invited) { + avatarIdSize += invitee.getLength(); + } + + avatarIdSize += owner.getLength() + creator.getLength(); + return 23 + path.length() + (title.length() * 2) + avatarIdSize; + } + @Override public void save(NetBufferStream stream) { stream.addByte(0); @@ -327,11 +332,10 @@ public class ChatRoom implements Encodable, Persistable { avatar.read(stream); return avatar; } - + @Override public String toString() { - return "ChatRoom[id=" + id + ", type=" + type + ", path='" + path + "', title='" + title + '\'' + - ", creator=" + creator + ", moderated=" + moderated + ", isPublic=" + isPublic() + "]"; + return "ChatRoom[id=" + id + ", type=" + type + ", path='" + path + "', title='" + title + '\'' + ", creator=" + creator + ", moderated=" + moderated + ", isPublic=" + isPublic() + "]"; } public static ChatRoom create(NetBufferStream stream) { diff --git a/src/resources/collections/SWGBitSet.java b/src/resources/collections/SWGBitSet.java index f807935c6..001b148bb 100644 --- a/src/resources/collections/SWGBitSet.java +++ b/src/resources/collections/SWGBitSet.java @@ -27,11 +27,10 @@ ***********************************************************************************/ package resources.collections; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.util.BitSet; import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; @@ -52,21 +51,25 @@ public class SWGBitSet extends BitSet implements Encodable, Persistable { @Override public byte[] encode() { - BitSet b = ((BitSet) this); byte[] bytes = toByteArray(); - ByteBuffer buffer = ByteBuffer.allocate(8 + bytes.length).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(bytes.length); - buffer.putInt(b.length()); - buffer.put(bytes); + NetBuffer buffer = NetBuffer.allocate(8 + bytes.length); + buffer.addInt(bytes.length); + buffer.addInt(super.length()); + buffer.addRawArray(bytes); return buffer.array(); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { // TODO: Decode method for SWGBitSet throw new UnsupportedOperationException("Unable to decode bitset!"); } + @Override + public int getLength() { + return 8 + (super.length()+7) / 8; + } + @Override public void save(NetBufferStream stream) { stream.addArray(toByteArray()); diff --git a/src/resources/collections/SWGFlag.java b/src/resources/collections/SWGFlag.java index 64fe0e8d0..5f6ea4815 100644 --- a/src/resources/collections/SWGFlag.java +++ b/src/resources/collections/SWGFlag.java @@ -33,6 +33,7 @@ import java.util.Arrays; import java.util.BitSet; import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; @@ -76,10 +77,15 @@ public class SWGFlag extends BitSet implements Encodable, Persistable { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { throw new UnsupportedOperationException("Unable to decode bitset!"); } + @Override + public int getLength() { + return 4 + (int) Math.ceil(super.size()/32.0); + } + @Override public void save(NetBufferStream stream) { stream.addArray(toByteArray()); diff --git a/src/resources/collections/SWGList.java b/src/resources/collections/SWGList.java index 74bf657c1..79635a094 100644 --- a/src/resources/collections/SWGList.java +++ b/src/resources/collections/SWGList.java @@ -42,7 +42,6 @@ import com.projectswg.common.encoding.Encoder; import com.projectswg.common.encoding.StringType; import com.projectswg.common.network.NetBuffer; -import network.packets.Packet; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.objects.SWGObject; @@ -167,7 +166,7 @@ public class SWGList extends SynchronizedList implements Encodable { synchronized (data) { if (dataSize == 0) return new byte[8]; - buffer = ByteBuffer.allocate(8 + dataSize).order(ByteOrder.LITTLE_ENDIAN); + buffer = ByteBuffer.allocate(getLength()).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(data.size()); buffer.putInt(updateCount.get()); @@ -178,14 +177,19 @@ public class SWGList extends SynchronizedList implements Encodable { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { // We need specific type information throw new UnsupportedOperationException("Use decode(ByteBuffer data, Class elementType) instead"); } + @Override + public int getLength() { + return 8 + dataSize; + } + public void decode(ByteBuffer data, StringType type) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); NetBuffer buffer = NetBuffer.wrap(data); for (int i = 0; i < size; i++) { @SuppressWarnings("unchecked") @@ -196,8 +200,8 @@ public class SWGList extends SynchronizedList implements Encodable { } public void decode(ByteBuffer data, Class elementType) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); boolean encodable = Encodable.class.isAssignableFrom(elementType); NetBuffer wrap = NetBuffer.wrap(data); @@ -213,7 +217,7 @@ public class SWGList extends SynchronizedList implements Encodable { try { E instance = elementType.newInstance(); if (instance instanceof Encodable) { - ((Encodable) instance).decode(wrap.getBuffer()); + ((Encodable) instance).decode(wrap); add(instance); } } catch (InstantiationException | IllegalAccessException e) { diff --git a/src/resources/collections/SWGMap.java b/src/resources/collections/SWGMap.java index 2bc0cdcc8..d57d05e04 100644 --- a/src/resources/collections/SWGMap.java +++ b/src/resources/collections/SWGMap.java @@ -39,7 +39,6 @@ import com.projectswg.common.encoding.Encoder; import com.projectswg.common.encoding.StringType; import com.projectswg.common.network.NetBuffer; -import network.packets.Packet; import resources.objects.SWGObject; public class SWGMap extends SynchronizedMap implements Encodable { @@ -135,15 +134,20 @@ public class SWGMap extends SynchronizedMap implements Encodable { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { throw new UnsupportedOperationException("Use decode(ByteBuffer data, Class kType, Class vType) instead"); } + @Override + public int getLength() { + return 8 + dataSize + data.size(); + } + @SuppressWarnings("unchecked") // Unfortunately the exception is just caught public void decode(ByteBuffer data, StringType keyType, StringType valType) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); NetBuffer buffer = NetBuffer.wrap(data); try { for (int i = 0; i < size; i++) { @@ -159,8 +163,8 @@ public class SWGMap extends SynchronizedMap implements Encodable { @SuppressWarnings("unchecked") // Unfortunately the exception is just caught public void decode(ByteBuffer data, StringType keyType, Class vType) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); NetBuffer buffer = NetBuffer.wrap(data); try { for (int i = 0; i < size; i++) { @@ -181,8 +185,8 @@ public class SWGMap extends SynchronizedMap implements Encodable { @SuppressWarnings("unchecked") // There is type checking in the respective if's public void decode(ByteBuffer data, Class kType, Class vType) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); NetBuffer buffer = NetBuffer.wrap(data); for (int i = 0; i < size; i++) { diff --git a/src/resources/collections/SWGSet.java b/src/resources/collections/SWGSet.java index 5b60326df..ccb72726a 100644 --- a/src/resources/collections/SWGSet.java +++ b/src/resources/collections/SWGSet.java @@ -44,7 +44,6 @@ import com.projectswg.common.encoding.Encoder; import com.projectswg.common.encoding.StringType; import com.projectswg.common.network.NetBuffer; -import network.packets.Packet; import network.packets.swg.zone.baselines.Baseline; import resources.objects.SWGObject; @@ -217,7 +216,7 @@ public class SWGSet extends SynchronizedSet implements Encodable { synchronized (data) { if (dataSize == 0) return new byte[8]; - buffer = ByteBuffer.allocate(8 + dataSize).order(ByteOrder.LITTLE_ENDIAN); + buffer = ByteBuffer.allocate(getLength()).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(data.size()); buffer.putInt(updateCount.get()); @@ -231,13 +230,18 @@ public class SWGSet extends SynchronizedSet implements Encodable { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { throw new UnsupportedOperationException("Use decode(ByteBuffer data, Class elementType) instead"); } + @Override + public int getLength() { + return 8 + dataSize; + } + public void decode(ByteBuffer data, StringType type) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); NetBuffer buffer = NetBuffer.wrap(data); for (int i = 0; i < size; i++) { @SuppressWarnings("unchecked") @@ -248,8 +252,8 @@ public class SWGSet extends SynchronizedSet implements Encodable { } public void decode(ByteBuffer data, Class elementType) { - int size = Packet.getInt(data); - updateCount.set(Packet.getInt(data)); + int size = data.getInt(); + updateCount.set(data.getInt()); boolean encodable = Encodable.class.isAssignableFrom(elementType); NetBuffer wrap = NetBuffer.wrap(data); @@ -265,7 +269,7 @@ public class SWGSet extends SynchronizedSet implements Encodable { try { E instance = elementType.newInstance(); if (instance instanceof Encodable) { - ((Encodable) instance).decode(wrap.getBuffer()); + ((Encodable) instance).decode(wrap); add(instance); } } catch (InstantiationException | IllegalAccessException e) { diff --git a/src/resources/encodables/OutOfBandPackage.java b/src/resources/encodables/OutOfBandPackage.java index 389ff3427..64849dade 100644 --- a/src/resources/encodables/OutOfBandPackage.java +++ b/src/resources/encodables/OutOfBandPackage.java @@ -27,90 +27,72 @@ ***********************************************************************************/ package resources.encodables; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.util.ArrayList; import java.util.Collections; -import java.util.LinkedList; import java.util.List; +import com.projectswg.common.data.EnumLookup; import com.projectswg.common.debug.Log; import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; -import network.packets.Packet; import resources.objects.waypoint.WaypointObject; public class OutOfBandPackage implements Encodable, Persistable { - private List packages; - private transient List data; - private transient int dataSize; - + private final List packages; + public OutOfBandPackage() { - packages = new ArrayList<>(5); - data = null; - dataSize = 0; + packages = new ArrayList<>(); } - - public OutOfBandPackage(OutOfBandData... outOfBandData) { + + public OutOfBandPackage(OutOfBandData ... outOfBandData) { this(); Collections.addAll(packages, outOfBandData); } - private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { - ois.defaultReadObject(); - data = null; - dataSize = 0; - } - public List getPackages() { return packages; } - + @Override public byte[] encode() { - if (packages.size() == 0) + if (packages.isEmpty()) return new byte[4]; - - if (data == null) { - data = new LinkedList<>(); - - for (OutOfBandData outOfBandData : packages) { - byte[] bytes = packOutOfBandData(outOfBandData); - dataSize += bytes.length; - data.add(bytes); - } + + int length = getLength(); + NetBuffer data = NetBuffer.allocate(length); + data.addInt((length-4) / 2); // Client treats this like a unicode string, so it's half the actual size of the array + for (OutOfBandData oob : packages) { + data.addRawArray(packOutOfBandData(oob)); } - - ByteBuffer bb = ByteBuffer.allocate(4 + dataSize).order(ByteOrder.LITTLE_ENDIAN); - - bb.putInt(dataSize / 2); - - data.forEach(bb::put); - - return bb.array(); + return data.array(); } - + @Override - public void decode(ByteBuffer data) { - int size = data.getInt() * 2; - - int padding; - int start; - - for (int read = 0; read < size; read++) { - start = data.position(); - padding = data.getShort(); - unpackOutOfBandData(data, Type.valueOf(data.get())); + public void decode(NetBuffer data) { + int remaining = data.getInt() * 2; + while (remaining > 0) { + int start = data.position(); + int padding = data.getShort(); + Type type = Type.getTypeForByte(data.getByte()); + unpackOutOfBandData(data, type); data.position(data.position() + padding); - read += data.position() - start; + remaining -= data.position() - start; } } + @Override + public int getLength() { + int size = 4; + for (OutOfBandData oob : packages) { + size += getOOBLength(oob); + } + return size; + } + @Override public void save(NetBufferStream stream) { stream.addList(packages, (p) -> OutOfBandFactory.save(p, stream)); @@ -120,84 +102,84 @@ public class OutOfBandPackage implements Encodable, Persistable { public void read(NetBufferStream stream) { stream.getList((i) -> packages.add(OutOfBandFactory.create(stream))); } - - private void unpackOutOfBandData(ByteBuffer data, Type type) { + + private void unpackOutOfBandData(NetBuffer data, Type type) { // Position doesn't seem to be reflective of it's spot in the package list, not sure if this can be automated // as the client will send -3 for multiple waypoints in a mail, so could be static for each OutOfBandData // If that's the case, then we can move the position variable to the Type enum instead of a method return statement -/* int position =*/ data.getInt(); - switch(type) { + data.getInt(); // position + OutOfBandData oob; + switch (type) { case PROSE_PACKAGE: - ProsePackage prose = Packet.getEncodable(data, ProsePackage.class); - packages.add(prose); + oob = data.getEncodable(ProsePackage.class); break; case WAYPOINT: - WaypointObject waypoint = new WaypointObject(-1); - waypoint.decode(data); - packages.add(waypoint); + oob = new WaypointObject(-1); + oob.decode(data); break; case STRING_ID: - StringId stringId = Packet.getEncodable(data, StringId.class); - packages.add(stringId); + oob = data.getEncodable(StringId.class); break; default: Log.e("Tried to decode an unsupported OutOfBandData Type: " + type); - break; + return; } + packages.add(oob); } - - private byte[] packOutOfBandData(OutOfBandData data) { - byte[] base = data.encode(); - + + private byte[] packOutOfBandData(OutOfBandData oob) { // Type and position is included in the padding size - int paddingSize = (base.length + 5) % 2; - - ByteBuffer bb = ByteBuffer.allocate(7 + paddingSize + base.length); - - Packet.addShort(bb, paddingSize); // Number of bytes for decoding to skip over when reading - Packet.addByte(bb, data.getOobType().getType()); - Packet.addInt(bb, data.getOobPosition()); - Packet.addData(bb, base); - + int paddingSize = getOOBPaddingSize(oob); + NetBuffer data = NetBuffer.allocate(getOOBLength(oob)); + data.addShort(paddingSize); // Number of bytes for decoding to skip over when reading + data.addByte(oob.getOobType().getType()); + data.addInt(oob.getOobPosition()); + data.addEncodable(oob); for (int i = 0; i < paddingSize; i++) { - Packet.addByte(bb, 0); + data.addByte(0); } - - return bb.array(); + + return data.array(); } - + + private int getOOBLength(OutOfBandData oob) { + return 7 + oob.getLength() + getOOBPaddingSize(oob); + } + + private int getOOBPaddingSize(OutOfBandData oob) { + return (oob.getLength() + 5) % 2; + } + @Override public String toString() { return "OutOfBandPackage[packages=" + packages + "]"; } - + public enum Type { - UNDEFINED(Byte.MIN_VALUE), - OBJECT(0), - PROSE_PACKAGE(1), - UNKNOWN(2), - AUCTION_TOKEN(3), - WAYPOINT(4), - STRING_ID(5), - STRING(6), - UNKNOWN_2(7); - + UNDEFINED (Byte.MIN_VALUE), + OBJECT (0), + PROSE_PACKAGE (1), + AUCTION_TOKEN (2), + OBJECT_ATTRIBUTES (3), + WAYPOINT (4), + STRING_ID (5), + STRING (6), + NUM_TYPES (7); + + private static final EnumLookup LOOKUP = new EnumLookup<>(Type.class, t -> t.getType()); + byte type; - + Type(int type) { this.type = (byte) type; } - + public byte getType() { return type; } - - public static Type valueOf(byte typeByte) { - for (Type type : Type.values()) { - if (type.getType() == typeByte) - return type; - } - return Type.UNDEFINED; + + public static Type getTypeForByte(byte typeByte) { + return LOOKUP.getEnum(typeByte, UNDEFINED); } } } diff --git a/src/resources/encodables/ProsePackage.java b/src/resources/encodables/ProsePackage.java index 3e63f4ccf..26ee4dcd4 100644 --- a/src/resources/encodables/ProsePackage.java +++ b/src/resources/encodables/ProsePackage.java @@ -28,206 +28,199 @@ package resources.encodables; import java.math.BigInteger; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.charset.Charset; import com.projectswg.common.debug.Log; import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; -import network.packets.Packet; - public class ProsePackage implements OutOfBandData { - private StringId base = new StringId("", ""); - - private Prose actor = new Prose(); - private Prose target = new Prose(); - private Prose other = new Prose(); - - // Decimal Integer - private int di; - // Decimal Float - private float df; - - private boolean grammarFlag = false; - - public ProsePackage() {} - + private StringId base; + private Prose actor; + private Prose target; + private Prose other; + private int di; // decimal integer + private float df; // decimal float + private boolean grammarFlag; + + public ProsePackage() { + this.base = new StringId("", ""); + this.actor = new Prose(); + this.target = new Prose(); + this.other = new Prose(); + this.di = 0; + this.df = 0; + this.grammarFlag = false; + } + /** * Creates a new ProsePackage that only specifies a StringId + * * @param table Base stf table for this ProsePackage * @param key The key for the provided table to use */ public ProsePackage(String table, String key) { + this(); setStringId(new StringId(table, key)); } - + /** - * Creates a new ProsePackage that contains only 1 parameter for the specified StringId object - *

- * Example:
+ * Creates a new ProsePackage that contains only 1 parameter for the specified StringId object
+ *
+ * Example:
*      ProsePackage("@base_player:prose_deposit_success", "DI", 500) + * * @param stringId The base stringId for this ProsePackage * @param proseKey The key in the message, can either be TU, TT, TO, or DI. * @param prose Value to set for this key, instance depends on the key. */ public ProsePackage(StringId stringId, String proseKey, Object prose) { + this(); setStringId(stringId); setProse(proseKey, prose); } /** - * Creates a new ProsePackage with multiple defined parameters. The first Object must be the prose key, followed by the keys value, and so on. If you're only setting 1 parameter, - * you should use the ProsePackage(key, prose) constructor instead. - *

+ * Creates a new ProsePackage with multiple defined parameters. The first Object must be the prose key, followed by the keys value, and so on. If you're only setting 1 parameter, you should use the ProsePackage(key, prose) constructor instead.
+ *
* Example:
*      ProsePackage("StringId", new StringId("base_player", "prose_deposit_success"), "DI", 500) + * * @param objects Key followed by the value. Can either be STF, TU, TT, TO, or DI. */ public ProsePackage(Object ... objects) { + this(); int length = objects.length; - for (int i = 0; i < length-1; i++) { + for (int i = 0; i < length - 1; i++) { if (!(objects[i] instanceof String)) // Make sure that it's a key, chance of it being a customString though continue; - setProse((String) objects[i], objects[i+1]); + setProse((String) objects[i], objects[i + 1]); } } private void setProse(String key, Object prose) { switch (key) { - - case "StringId": - setStringId(prose); - break; - case "TU": - setTU(prose); - break; - case "TT": - setTT(prose); - break; - case "TO": - setTO(prose); - break; - case "DI": - if (prose instanceof Integer) - setDI((Integer) prose); - else { Log.w("DI can only be a Integer!"); } - break; + case "StringId": + setStringId(prose); + break; + case "TU": + setTU(prose); + break; + case "TT": + setTT(prose); + break; + case "TO": + setTO(prose); + break; + case "DI": + if (prose instanceof Integer) + setDI((Integer) prose); + else { + Log.w("DI can only be a Integer!"); + } + break; + case "DF": + if (prose instanceof Float) + setDF((Float) prose); + else { + Log.w("DF can only be a Float!"); + } + break; + default: + break; - case "DF": - if (prose instanceof Float) - setDF((Float) prose); - else { Log.w("DF can only be a Float!"); } - break; - - default: break; - } } public void setStringId(Object prose) { - if (prose instanceof StringId) { base = (StringId) prose; } - else if (prose instanceof String) { - if (((String) prose).startsWith("@")) { base = new StringId((String) prose); } - else { Log.w("The base STF cannot be a custom string!"); } - } else { Log.w("The base STF must be either a Stf or a String! Received class: " + prose.getClass().getName()); } + if (prose instanceof StringId) { + base = (StringId) prose; + } else if (prose instanceof String) { + if (((String) prose).startsWith("@")) { + base = new StringId((String) prose); + } else { + Log.w("The base STF cannot be a custom string!"); + } + } else { + Log.w("The base STF must be either a Stf or a String! Received class: " + prose.getClass().getName()); + } } public void setTU(Object prose) { - if (prose instanceof StringId) - actor.setStringId((StringId) prose); - else if (prose instanceof String) { - if (((String) prose).startsWith("@")) - actor.setStringId(new StringId((String) prose)); - else actor.setText((String) prose); - } - else if (prose instanceof Long) - actor.setObjectId((Long) prose); - else if (prose instanceof BigInteger) - actor.setObjectId(((BigInteger) prose).longValue()); - else - Log.w("Proses can only be Strings or Longs! Received class: " + prose.getClass().getName()); + setProse(actor, prose); } public void setTT(Object prose) { - if (prose instanceof StringId) - target.setStringId((StringId) prose); - else if (prose instanceof String) { - if (((String) prose).startsWith("@")) - target.setStringId(new StringId((String) prose)); - else target.setText((String) prose); - } - else if (prose instanceof Long) - target.setObjectId((Long) prose); - else if (prose instanceof BigInteger) - target.setObjectId(((BigInteger) prose).longValue()); - else - Log.w("Proses can only be Strings or Longs! Received class: " + prose.getClass().getName()); + setProse(target, prose); } public void setTO(Object prose) { - if (prose instanceof StringId) - other.setStringId((StringId) prose); - else if (prose instanceof String) { - if (((String) prose).startsWith("@")) - other.setStringId(new StringId((String) prose)); - else other.setText((String) prose); - } - else if (prose instanceof Long) - other.setObjectId((Long) prose); - else if (prose instanceof BigInteger) - other.setObjectId(((BigInteger) prose).longValue()); - else - Log.w("Proses can only be Strings or Longs! Received class: " + prose.getClass().getName()); + setProse(other, prose); } public void setDI(Integer prose) { di = prose; } - + public void setDF(Float prose) { df = prose; } - + public void setGrammarFlag(boolean useGrammar) { grammarFlag = useGrammar; } - + + private void setProse(Prose prose, Object obj) { + if (obj instanceof StringId) { + prose.setStringId((StringId) obj); + } else if (obj instanceof String) { + if (((String) obj).startsWith("@")) { + prose.setStringId(new StringId((String) obj)); + } else { + prose.setText((String) obj); + } + } else if (obj instanceof Long) { + prose.setObjectId((Long) obj); + } else if (obj instanceof BigInteger) { + prose.setObjectId(((BigInteger) obj).longValue()); + } else { + Log.w("Proses can only be Strings or Longs! Received class: " + prose.getClass().getName()); + } + } + @Override public byte[] encode() { if (base == null) // There must be a base stf always return null; - byte[] stringData = base.encode(); - byte[] actorData = actor.encode(); - byte[] targetData = target.encode(); - byte[] otherData = other.encode(); - - ByteBuffer bb = ByteBuffer.allocate(9 + stringData.length + actorData.length + targetData.length + otherData.length); - Packet.addData(bb, stringData); - Packet.addData(bb, actorData); - Packet.addData(bb, targetData); - Packet.addData(bb, otherData); - Packet.addInt(bb, di); - Packet.addFloat(bb, df); - Packet.addBoolean(bb, grammarFlag); - - return bb.array(); + NetBuffer data = NetBuffer.allocate(getLength()); + data.addEncodable(base); + data.addEncodable(actor); + data.addEncodable(target); + data.addEncodable(other); + data.addInt(di); + data.addFloat(df); + data.addBoolean(grammarFlag); + return data.array(); } - + @Override - public void decode(ByteBuffer data) { - base = Packet.getEncodable(data, StringId.class); - actor = Packet.getEncodable(data, Prose.class); - target = Packet.getEncodable(data, Prose.class); - other = Packet.getEncodable(data, Prose.class); - di = Packet.getInt(data); - df = Packet.getInt(data); - grammarFlag = Packet.getBoolean(data); + public void decode(NetBuffer data) { + base = data.getEncodable(StringId.class); + actor = data.getEncodable(Prose.class); + target = data.getEncodable(Prose.class); + other = data.getEncodable(Prose.class); + di = data.getInt(); + df = data.getInt(); + grammarFlag = data.getBoolean(); + } + + @Override + public int getLength() { + return 9 + base.getLength() + actor.getLength() + target.getLength() + other.getLength(); } @Override @@ -253,69 +246,68 @@ public class ProsePackage implements OutOfBandData { di = stream.getInt(); df = stream.getFloat(); } - + @Override public OutOfBandPackage.Type getOobType() { return OutOfBandPackage.Type.PROSE_PACKAGE; } - + @Override public int getOobPosition() { return -1; } - + @Override public String toString() { - return "ProsePackage[base=" + base + ", grammarFlag=" + grammarFlag + - ", actor=" + actor + ", target=" + target + ", other=" + other + - ", di=" + di + ", df=" + df + - "]"; + return "ProsePackage[base=" + base + ", grammarFlag=" + grammarFlag + ", actor=" + actor + ", target=" + target + ", other=" + other + ", di=" + di + ", df=" + df + "]"; } - + private static class Prose implements Encodable, Persistable { private long objectId; private StringId stringId; private String text; - + public Prose() { stringId = new StringId("", ""); } - + public void setObjectId(long objectId) { this.objectId = objectId; } - + public void setStringId(StringId stringId) { this.stringId = stringId; } - + public void setText(String text) { this.text = text; } - + @Override public byte[] encode() { - byte[] stfData = stringId.encode(); - ByteBuffer bb = ByteBuffer.allocate(12 + stfData.length + (text != null ? (4 + (text.length() * 2)) : 0)).order(ByteOrder.LITTLE_ENDIAN); - - bb.putLong(objectId); - bb.put(stfData); + NetBuffer data = NetBuffer.allocate(getLength()); + data.addLong(objectId); + data.addEncodable(stringId); if (text != null && !text.isEmpty()) { - bb.putInt(text.length()); - bb.put(text.getBytes(Charset.forName("UTF-16LE"))); + data.addInt(text.length()); + data.addUnicode(text); } else { - bb.putInt(0); + data.addInt(0); } - - return bb.array(); + return data.array(); } - + @Override - public void decode(ByteBuffer data) { - objectId = Packet.getLong(data); - stringId = Packet.getEncodable(data, StringId.class); - text = Packet.getUnicode(data); + public void decode(NetBuffer data) { + objectId = data.getLong(); + stringId = data.getEncodable(StringId.class); + text = data.getUnicode(); + } + + @Override + public int getLength() { + return 12 + stringId.getLength() + (text != null ? (4 + (text.length() * 2)) : 0); } @Override @@ -339,4 +331,5 @@ public class ProsePackage implements OutOfBandData { return "Prose[objectId=" + objectId + ", stringId=" + stringId + ", text='" + text + "']"; } } + } diff --git a/src/resources/encodables/StringId.java b/src/resources/encodables/StringId.java index 3350549d7..dbd6f3911 100644 --- a/src/resources/encodables/StringId.java +++ b/src/resources/encodables/StringId.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package resources.encodables; -import java.nio.ByteBuffer; - import com.projectswg.common.debug.Log; import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; @@ -66,7 +64,7 @@ public class StringId implements OutOfBandData, Persistable { @Override public byte[] encode() { - NetBuffer buffer = NetBuffer.allocate(8 + key.length() + file.length()); + NetBuffer buffer = NetBuffer.allocate(getLength()); buffer.addAscii(file); buffer.addInt(0); buffer.addAscii(key); @@ -74,11 +72,15 @@ public class StringId implements OutOfBandData, Persistable { } @Override - public void decode(ByteBuffer data) { - NetBuffer buffer = NetBuffer.wrap(data); - file = buffer.getAscii(); - buffer.getInt(); - key = buffer.getAscii(); + public void decode(NetBuffer data) { + file = data.getAscii(); + data.getInt(); + key = data.getAscii(); + } + + @Override + public int getLength() { + return 8 + key.length() + file.length(); } @Override diff --git a/src/resources/encodables/player/Equipment.java b/src/resources/encodables/player/Equipment.java index 7eaf0b204..d1b0059f9 100644 --- a/src/resources/encodables/player/Equipment.java +++ b/src/resources/encodables/player/Equipment.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package resources.encodables.player; -import java.nio.ByteBuffer; - import com.projectswg.common.data.CRC; import com.projectswg.common.debug.Log; import com.projectswg.common.encoding.Encodable; @@ -72,25 +70,20 @@ public class Equipment implements Encodable, Persistable { @Override public byte [] encode() { - byte [] weaponData = new byte[0]; - if (weapon != null) - weaponData = getWeaponData(); + byte [] weaponData = (weapon != null) ? getWeaponData() : new byte[0]; NetBuffer buffer = NetBuffer.allocate(19 + weaponData.length); - buffer.addArray(customizationString); // TODO: Create encodable class for customization string buffer.addInt(arrangementId); buffer.addLong(objectId); buffer.addEncodable(template); buffer.addBoolean(weapon != null); buffer.addRawArray(weaponData); - return buffer.array(); } @Override - public void decode(ByteBuffer bb) { - NetBuffer data = NetBuffer.wrap(bb); + public void decode(NetBuffer data) { customizationString = data.getArray(); // TODO: Create encodable class for customization string arrangementId = data.getInt(); objectId = data.getLong(); @@ -99,6 +92,11 @@ public class Equipment implements Encodable, Persistable { this.weapon = createWeaponFromData(data); } + @Override + public int getLength() { + return 19 + (weapon != null ? getWeaponData().length : 0); + } + @Override public void save(NetBufferStream stream) { stream.addByte(0); @@ -139,15 +137,15 @@ public class Equipment implements Encodable, Persistable { private byte[] getWeaponData() { Player target = weapon.getOwner(); - ByteBuffer data3 = weapon.createBaseline3(target).encode(); + NetBuffer data3 = weapon.createBaseline3(target).encode(); data3.position(0); - ByteBuffer data6 = weapon.createBaseline6(target).encode(); + NetBuffer data6 = weapon.createBaseline6(target).encode(); data6.position(0); - ByteBuffer ret = ByteBuffer.allocate(data3.remaining() + data6.remaining()); - ret.put(data3); - ret.put(data6); + NetBuffer ret = NetBuffer.allocate(data3.remaining() + data6.remaining()); + ret.addRawArray(data3.array()); + ret.addRawArray(data6.array()); return ret.array(); } @@ -155,9 +153,9 @@ public class Equipment implements Encodable, Persistable { SWGObject weapon = ObjectCreator.createObjectFromTemplate(objectId, template.getString()); Baseline b3 = new Baseline(); - b3.decode(data.getBuffer()); + b3.decode(data); Baseline b6 = new Baseline(); - b6.decode(data.getBuffer()); + b6.decode(data); weapon.parseBaseline(b3); weapon.parseBaseline(b6); diff --git a/src/resources/encodables/player/Mail.java b/src/resources/encodables/player/Mail.java index 6595fcaf9..cd275ab24 100644 --- a/src/resources/encodables/player/Mail.java +++ b/src/resources/encodables/player/Mail.java @@ -27,15 +27,11 @@ ***********************************************************************************/ package resources.encodables.player; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - import com.projectswg.common.encoding.Encodable; -import com.projectswg.common.encoding.Encoder; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import com.projectswg.common.persistable.Persistable; -import network.packets.Packet; import resources.encodables.OutOfBandPackage; public class Mail implements Encodable, Persistable { @@ -73,6 +69,10 @@ public class Mail implements Encodable, Persistable { public String getSender() { return sender; } + + public void setSender(String sender) { + this.sender = sender; + } public long getReceiverId() { return receiverId; @@ -108,21 +108,23 @@ public class Mail implements Encodable, Persistable { @Override public byte[] encode() { - byte[] oob = outOfBandPackage.encode(); - - ByteBuffer bb = ByteBuffer.allocate(8 + (message.length() * 2) + (subject.length() * 2) + oob.length); - Packet.addUnicode(bb, message); - Packet.addUnicode(bb, subject); - Packet.addData(bb, oob); - - return bb.array(); + NetBuffer data = NetBuffer.allocate(getLength()); + data.addUnicode(message); + data.addUnicode(subject); + data.addEncodable(outOfBandPackage); + return data.array(); } @Override - public void decode(ByteBuffer data) { - message = Packet.getUnicode(data); - subject = Packet.getUnicode(data); - outOfBandPackage = Packet.getEncodable(data, OutOfBandPackage.class); + public void decode(NetBuffer data) { + message = data.getUnicode(); + subject = data.getUnicode(); + outOfBandPackage = data.getEncodable(OutOfBandPackage.class); + } + + @Override + public int getLength() { + return 8 + message.length()*2 + subject.length()*2 + outOfBandPackage.getLength(); } @Override @@ -156,10 +158,12 @@ public class Mail implements Encodable, Persistable { } } + @Override public int hashCode() { return id; } + @Override public boolean equals(Object o) { if (!(o instanceof Mail)) return false; @@ -167,11 +171,17 @@ public class Mail implements Encodable, Persistable { } public byte[] encodeHeader() { - ByteBuffer bb = ByteBuffer.allocate(12 + subject.length() * 2).order(ByteOrder.LITTLE_ENDIAN); - bb.putInt(0); - bb.put(Encoder.encodeUnicode(subject)); - bb.putInt(0); - return bb.array(); + NetBuffer data = NetBuffer.allocate(12 + subject.length() * 2); + data.addInt(0); + data.addUnicode(subject); + data.addInt(0); + return data.array(); + } + + public void decodeHeader(NetBuffer data) { + data.getInt(); + subject = data.getUnicode(); + data.getInt(); } public static Mail create(NetBufferStream stream) { diff --git a/src/resources/network/DeltaBuilder.java b/src/resources/network/DeltaBuilder.java index 88b8e2e27..57ce29afa 100644 --- a/src/resources/network/DeltaBuilder.java +++ b/src/resources/network/DeltaBuilder.java @@ -70,13 +70,7 @@ public class DeltaBuilder { } public DeltasMessage getBuiltMessage() { - DeltasMessage delta = new DeltasMessage(); - delta.setId(object.getObjectId()); - delta.setType(type); - delta.setNum(num); - delta.setUpdate(updateType); - delta.setData(data); - return delta; + return new DeltasMessage(object.getObjectId(), type, num, updateType, data); } } diff --git a/src/resources/objects/creature/Buff.java b/src/resources/objects/creature/Buff.java index 30d74f4fc..0461f4b05 100644 --- a/src/resources/objects/creature/Buff.java +++ b/src/resources/objects/creature/Buff.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package resources.objects.creature; -import java.nio.ByteBuffer; - import com.projectswg.common.encoding.Encodable; import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; @@ -57,7 +55,7 @@ public class Buff implements Encodable, Persistable { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { endTime = data.getInt(); value = data.getFloat(); duration = data.getInt(); @@ -76,6 +74,11 @@ public class Buff implements Encodable, Persistable { return data.array(); } + @Override + public int getLength() { + return 24; + } + @Override public void save(NetBufferStream stream) { stream.addByte(1); @@ -167,10 +170,12 @@ public class Buff implements Encodable, Persistable { return String.format("Buff[End=%d Value=%f Duration=%d Buffer=%d StackCount=%d]", endTime, value, duration, bufferId, stackCount); } + @Override public int hashCode() { return crc; } + @Override public boolean equals(Object o) { if (!(o instanceof Buff)) return false; diff --git a/src/resources/objects/group/GroupObject.java b/src/resources/objects/group/GroupObject.java index 27118bfca..43beaa181 100644 --- a/src/resources/objects/group/GroupObject.java +++ b/src/resources/objects/group/GroupObject.java @@ -26,7 +26,6 @@ ******************************************************************************/ package resources.objects.group; -import java.nio.ByteBuffer; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -40,8 +39,8 @@ import com.projectswg.common.data.location.Terrain; import com.projectswg.common.debug.Assert; import com.projectswg.common.encoding.Encodable; import com.projectswg.common.encoding.StringType; +import com.projectswg.common.network.NetBuffer; -import network.packets.Packet; import network.packets.swg.zone.baselines.Baseline; import resources.collections.SWGList; import resources.network.BaselineBuilder; @@ -255,13 +254,21 @@ public class GroupObject extends SWGObject { @Override public byte[] encode() { - return ByteBuffer.allocate(8).putInt(start).putInt(end).array(); + NetBuffer data = NetBuffer.allocate(8); + data.addInt(start); + data.addInt(end); + return data.array(); } @Override - public void decode(ByteBuffer data) { - start = Packet.getInt(data); - end = Packet.getInt(data); + public void decode(NetBuffer data) { + start = data.getInt(); + end = data.getInt(); + } + + @Override + public int getLength() { + return 8; } } @@ -277,16 +284,21 @@ public class GroupObject extends SWGObject { @Override public byte[] encode() { String name = creature.getObjectName(); - ByteBuffer bb = ByteBuffer.allocate(10 + name.length()); - Packet.addLong(bb, creature.getObjectId()); - Packet.addAscii(bb, name); - return bb.array(); + NetBuffer data = NetBuffer.allocate(10 + name.length()); + data.addLong(creature.getObjectId()); + data.addAscii(name); + return data.array(); } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { } + + @Override + public int getLength() { + return 10 + creature.getObjectName().length(); + } public long getId() { return creature.getObjectId(); diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index ed4a7469c..c86da881e 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package resources.objects.guild; -import java.nio.ByteBuffer; - import com.projectswg.common.encoding.Encodable; import com.projectswg.common.encoding.StringType; import com.projectswg.common.network.NetBuffer; @@ -100,10 +98,15 @@ public class GuildObject extends SWGObject { } @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { percentage = data.getInt(); } + @Override + public int getLength() { + return 4; + } + @Override public String toString() { return percentage + "%"; @@ -124,12 +127,16 @@ public class GuildObject extends SWGObject { } @Override - public void decode(ByteBuffer bb) { - NetBuffer data = NetBuffer.wrap(bb); + public void decode(NetBuffer data) { lastUpdateTime = data.getInt(); percentage = data.getInt(); } + @Override + public int getLength() { + return 8; + } + @Override public String toString() { return lastUpdateTime + ":" + percentage + "%"; @@ -150,12 +157,16 @@ public class GuildObject extends SWGObject { } @Override - public void decode(ByteBuffer bb) { - NetBuffer data = NetBuffer.wrap(bb); + public void decode(NetBuffer data) { zone = data.getAscii(); percentage = data.getInt(); } + @Override + public int getLength() { + return 6 + zone.length(); + } + @Override public String toString() { return zone + ":" + percentage + "%"; diff --git a/src/resources/objects/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index 71ad62bae..018747233 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -27,8 +27,6 @@ ***********************************************************************************/ package resources.objects.mission; -import java.nio.ByteBuffer; - import com.projectswg.common.data.CRC; import com.projectswg.common.data.location.Point3D; import com.projectswg.common.data.location.Terrain; @@ -63,6 +61,7 @@ public class MissionObject extends IntangibleObject { super(objectId, BaselineType.MISO); } + @Override public void createBaseline3(Player target, BaselineBuilder bb) { super.createBaseline3(target, bb); bb.addInt(difficulty); @@ -79,11 +78,13 @@ public class MissionObject extends IntangibleObject { bb.addObject(waypoint); } + @Override public void createBaseline6(Player target, BaselineBuilder bb) { super.createBaseline6(target, bb); bb.addInt(-1); } + @Override public void parseBaseline3(NetBuffer buffer) { super.parseBaseline3(buffer); difficulty = buffer.getInt(); @@ -102,9 +103,10 @@ public class MissionObject extends IntangibleObject { buffer.getUnicode(); waypoint = new WaypointObject(buffer.getLong()); buffer.position(pos); - waypoint.decode(buffer.getBuffer()); + waypoint.decode(buffer); } + @Override public void parseBaseline6(NetBuffer buffer) { super.parseBaseline6(buffer); buffer.getInt(); @@ -160,7 +162,7 @@ public class MissionObject extends IntangibleObject { @Override public byte[] encode() { - NetBuffer data = NetBuffer.allocate(24); + NetBuffer data = NetBuffer.allocate(getLength()); data.addEncodable(location); data.addLong(objectId); data.addInt(terrain.getCrc()); @@ -168,13 +170,17 @@ public class MissionObject extends IntangibleObject { } @Override - public void decode(ByteBuffer bb) { - NetBuffer data = NetBuffer.wrap(bb); + public void decode(NetBuffer data) { location = data.getEncodable(Point3D.class); objectId = data.getLong(); terrain = Terrain.getTerrainFromCrc(data.getInt()); } + @Override + public int getLength() { + return location.getLength() + 12; + } + @Override public void save(NetBufferStream stream) { stream.addInt(0); diff --git a/src/resources/objects/waypoint/WaypointObject.java b/src/resources/objects/waypoint/WaypointObject.java index c758e9b84..3e296858b 100644 --- a/src/resources/objects/waypoint/WaypointObject.java +++ b/src/resources/objects/waypoint/WaypointObject.java @@ -27,13 +27,11 @@ ***********************************************************************************/ package resources.objects.waypoint; -import java.nio.ByteBuffer; - import com.projectswg.common.data.location.Location; import com.projectswg.common.data.location.Terrain; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; -import network.packets.Packet; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.encodables.OutOfBandData; import resources.encodables.OutOfBandPackage; @@ -43,82 +41,90 @@ import resources.player.Player; public class WaypointObject extends IntangibleObject implements OutOfBandData { private long cellId; - private String name = "New Waypoint"; - private WaypointColor color = WaypointColor.BLUE; - private boolean active = true; + private String name; + private WaypointColor color; + private boolean active; public WaypointObject(long objectId) { super(objectId, BaselineType.WAYP); + this.cellId = 0; + this.name = "New Waypoint"; + this.color = WaypointColor.BLUE; + this.active = true; } - + @Override public String getObjectName() { return name; } - + public void setName(String name) { this.name = name; } - + public WaypointColor getColor() { return color; } - + public void setColor(WaypointColor color) { this.color = color; } - + public boolean isActive() { return active; } - + public void setActive(boolean active) { this.active = active; } - + public long getCellId() { return cellId; } - + public void setCellId(long cellId) { this.cellId = cellId; } - + @Override public void createObject(Player target) { // NOTE: Client is never sent a WAYP baseline in NGE, WaypointObject's just go inside the Waypoint List in PLAY. } - + @Override public byte[] encode() { - Location loc = getLocation(); - ByteBuffer bb = ByteBuffer.allocate(42 + name.length() * 2); - Packet.addInt(bb, 0); - Packet.addFloat(bb, (float) loc.getX()); - Packet.addFloat(bb, (float) loc.getY()); - Packet.addFloat(bb, (float) loc.getZ()); - Packet.addLong(bb, cellId); - Packet.addCrc(bb, loc.getTerrain().getName()); - Packet.addUnicode(bb, name); - Packet.addLong(bb, getObjectId()); - Packet.addByte(bb, color.getValue()); - Packet.addBoolean(bb, active); - return bb.array(); + NetBuffer data = NetBuffer.allocate(getLength()); + data.addInt(0); + data.addFloat((float) getX()); + data.addFloat((float) getY()); + data.addFloat((float) getZ()); + data.addLong(cellId); + data.addInt(getTerrain().getCrc()); + data.addUnicode(name); + data.addLong(getObjectId()); + data.addByte(color.getValue()); + data.addBoolean(active); + return data.array(); } - + @Override - public void decode(ByteBuffer data) { + public void decode(NetBuffer data) { data.getInt(); Location loc = new Location(data.getFloat(), data.getFloat(), data.getFloat(), null); - cellId = Packet.getLong(data); + cellId = data.getLong(); loc.setTerrain(Terrain.getTerrainFromCrc(data.getInt())); - name = Packet.getUnicode(data); - Packet.getLong(data); // objectId - color = WaypointColor.valueOf(data.get()); - active = Packet.getBoolean(data); + name = data.getUnicode(); + data.getLong(); // objectId + color = WaypointColor.valueOf(data.getByte()); + active = data.getBoolean(); setLocation(loc); } + @Override + public int getLength() { + return 42 + name.length() * 2; + } + @Override public void save(NetBufferStream stream) { super.save(stream); @@ -138,42 +144,43 @@ public class WaypointObject extends IntangibleObject implements OutOfBandData { name = stream.getAscii(); color = WaypointColor.valueOf(stream.getAscii()); } - + @Override public OutOfBandPackage.Type getOobType() { return OutOfBandPackage.Type.WAYPOINT; } - + @Override public int getOobPosition() { return -3; } - + @Override public boolean equals(Object o) { - if (!super.equals(o)) + if (!(o instanceof WaypointObject)) return false; - if (o instanceof WaypointObject) { - WaypointObject wp = (WaypointObject) o; - return wp.name.equals(name) && wp.cellId == cellId && wp.color == color && wp.active == active; - } - return false; + WaypointObject wp = (WaypointObject) o; + return wp.name.equals(name) && wp.cellId == cellId && wp.color == color && wp.active == active; } @Override public int hashCode() { return ((super.hashCode() * 7 + name.hashCode()) * 13 + color.getValue()) * 17 + (int) cellId; } - + @Override public String toString() { - return "WaypointObject[" + - "cellId=" + cellId + ", name='" + name + '\'' + ", color=" + color + ", active=" + active + - ", location=" + getLocation() + "]"; + return "WaypointObject[" + "cellId=" + cellId + ", name='" + name + '\'' + ", color=" + color + ", active=" + active + ", location=" + getLocation() + "]"; } - - public enum WaypointColor{ - BLUE(1), GREEN(2), ORANGE(3), YELLOW(4), PURPLE(5), WHITE(6), MULTICOLOR(7); + + public enum WaypointColor { + BLUE(1), + GREEN(2), + ORANGE(3), + YELLOW(4), + PURPLE(5), + WHITE(6), + MULTICOLOR(7); private int i; @@ -181,8 +188,10 @@ public class WaypointObject extends IntangibleObject implements OutOfBandData { this.i = i; } - public int getValue() { return i; } - + public int getValue() { + return i; + } + public static WaypointColor valueOf(int colorId) { for (WaypointColor color : WaypointColor.values()) { if (color.getValue() == colorId) @@ -190,17 +199,25 @@ public class WaypointObject extends IntangibleObject implements OutOfBandData { } return WaypointColor.BLUE; } - + public static WaypointColor fromString(String string) { - switch(string) { - case "blue": return WaypointColor.BLUE; - case "green": return WaypointColor.GREEN; - case "orange": return WaypointColor.ORANGE; - case "yellow": return WaypointColor.YELLOW; - case "purple": return WaypointColor.PURPLE; - case "white": return WaypointColor.WHITE; - case "multicolor": return WaypointColor.MULTICOLOR; - default: return WaypointColor.BLUE; + switch (string) { + case "blue": + return WaypointColor.BLUE; + case "green": + return WaypointColor.GREEN; + case "orange": + return WaypointColor.ORANGE; + case "yellow": + return WaypointColor.YELLOW; + case "purple": + return WaypointColor.PURPLE; + case "white": + return WaypointColor.WHITE; + case "multicolor": + return WaypointColor.MULTICOLOR; + default: + return WaypointColor.BLUE; } } } diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index d7f34051f..73e0511c0 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -152,6 +152,7 @@ public class WeaponObject extends TangibleObject { return super.hashCode() * 7 + type.getNum(); } + @Override public void createBaseline3(Player target, BaselineBuilder bb) { super.createBaseline3(target, bb); @@ -166,6 +167,7 @@ public class WeaponObject extends TangibleObject { bb.incrementOperandCount(7); } + @Override public void createBaseline6(Player target, BaselineBuilder bb) { super.createBaseline6(target, bb); @@ -174,6 +176,7 @@ public class WeaponObject extends TangibleObject { bb.incrementOperandCount(1); } + @Override public void parseBaseline3(NetBuffer buffer) { super.parseBaseline3(buffer); attackSpeed = buffer.getFloat(); @@ -185,6 +188,7 @@ public class WeaponObject extends TangibleObject { buffer.getInt(); // elementalValue } + @Override public void parseBaseline6(NetBuffer buffer) { super.parseBaseline6(buffer); type = WeaponType.getWeaponType(buffer.getInt()); diff --git a/src/resources/radial/RadialOptionList.java b/src/resources/radial/RadialOptionList.java index 15b355b8d..9e67d9474 100644 --- a/src/resources/radial/RadialOptionList.java +++ b/src/resources/radial/RadialOptionList.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package resources.radial; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -36,8 +35,7 @@ import java.util.Map; import com.projectswg.common.debug.Log; import com.projectswg.common.encoding.Encodable; - -import network.packets.Packet; +import com.projectswg.common.network.NetBuffer; public class RadialOptionList implements Encodable { @@ -65,16 +63,17 @@ public class RadialOptionList implements Encodable { return Collections.unmodifiableList(options); } - public void decode(ByteBuffer data) { - int optionsCount = Packet.getInt(data); + @Override + public void decode(NetBuffer data) { + int optionsCount = data.getInt(); Map optionMap = new HashMap<>(); for (int i = 0; i < optionsCount; i++) { RadialOption option = new RadialOption(); - int opt = Packet.getByte(data); // option number - int parent = Packet.getByte(data); // parentId - int radialType = Packet.getShort(data); // radialType - Packet.getByte(data); // optionType - Packet.getUnicode(data); // text + int opt = data.getByte(); // option number + int parent = data.getByte(); // parentId + int radialType = data.getShort(); // radialType + data.getByte(); // optionType + data.getUnicode(); // text RadialItem item = RadialItem.getFromId(radialType); if (item == null) { Log.e("No radial item found for: %04X"); @@ -95,13 +94,19 @@ public class RadialOptionList implements Encodable { } } + @Override public byte [] encode() { - ByteBuffer data = ByteBuffer.allocate(4 + getOptionSize()); - Packet.addInt(data, getOptionCount()); + NetBuffer data = NetBuffer.allocate(4 + getOptionSize()); + data.addInt(getOptionCount()); addOptions(data); return data.array(); } + @Override + public int getLength() { + return 4 + getOptionSize(); + } + public int getSize() { return 4 + getOptionSize(); } @@ -122,7 +127,7 @@ public class RadialOptionList implements Encodable { return size; } - private void addOptions(ByteBuffer data) { + private void addOptions(NetBuffer data) { int index = 1; for (RadialOption option : options) { index = addOption(data, option, 0, index); @@ -147,16 +152,16 @@ public class RadialOptionList implements Encodable { return size; } - private int addOption(ByteBuffer data, RadialOption parent, int parentIndex, int index) { + private int addOption(NetBuffer data, RadialOption parent, int parentIndex, int index) { int myIndex = index++; - Packet.addByte(data, myIndex); - Packet.addByte(data, parentIndex); - Packet.addShort(data, parent.getId()); - Packet.addByte(data, parent.getOptionType()); + data.addByte(myIndex); + data.addByte(parentIndex); + data.addShort(parent.getId()); + data.addByte(parent.getOptionType()); if (parent.getText() != null || !parent.getText().isEmpty()) - Packet.addUnicode(data, parent.getText()); + data.addUnicode(parent.getText()); else - data.putInt(0); + data.addInt(0); for (RadialOption option : parent.getChildren()) { index = addOption(data, option, myIndex, index); } diff --git a/src/resources/sui/SuiBaseWindow.java b/src/resources/sui/SuiBaseWindow.java index 1eb4ca9c7..cb9eb47c0 100644 --- a/src/resources/sui/SuiBaseWindow.java +++ b/src/resources/sui/SuiBaseWindow.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package resources.sui; -import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; @@ -36,8 +35,7 @@ import java.util.Map; import com.projectswg.common.debug.Log; import com.projectswg.common.encoding.Encodable; - -import network.packets.Packet; +import com.projectswg.common.network.NetBuffer; public class SuiBaseWindow implements Encodable { @@ -292,35 +290,35 @@ public class SuiBaseWindow implements Encodable { @Override public byte[] encode() { - - int listSize = 0; - List componentData = new ArrayList<>(); - for (SuiComponent component : components) { - byte[] data = component.encode(); - componentData.add(data); - listSize += data.length; - } - - ByteBuffer data = ByteBuffer.allocate(34 + suiScript.length() + listSize); - Packet.addInt(data, id); - Packet.addAscii(data, suiScript); - Packet.addList(data, componentData); - Packet.addLong(data, rangeObjId); - Packet.addFloat(data, maxDistance); - Packet.addLong(data, 0); // Window Location? - Packet.addInt(data, 0); - + NetBuffer data = NetBuffer.allocate(getLength()); + data.addInt(id); + data.addAscii(suiScript); + data.addList(components); + data.addLong(rangeObjId); + data.addFloat(maxDistance); + data.addLong(0); // Window Location? + data.addInt(0); return data.array(); } - + @Override - public void decode(ByteBuffer data) { - id = Packet.getInt(data); - suiScript = Packet.getAscii(data); - components = Packet.getList(data, SuiComponent.class); - rangeObjId = Packet.getLong(data); - maxDistance = Packet.getFloat(data); + public void decode(NetBuffer data) { + id = data.getInt(); + suiScript = data.getAscii(); + components = data.getList(SuiComponent.class); + rangeObjId = data.getLong(); + maxDistance = data.getFloat(); // unk long // unk int } + + @Override + public int getLength() { + int listSize = 0; + for (SuiComponent component : components) { + listSize += component.getLength(); + } + return 34 + suiScript.length() + listSize; + } + } diff --git a/src/resources/sui/SuiComponent.java b/src/resources/sui/SuiComponent.java index 6a4c6c0c7..a4b6912a3 100644 --- a/src/resources/sui/SuiComponent.java +++ b/src/resources/sui/SuiComponent.java @@ -27,7 +27,6 @@ package resources.sui; -import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -35,8 +34,7 @@ import java.util.List; import com.projectswg.common.debug.Log; import com.projectswg.common.encoding.Encodable; import com.projectswg.common.encoding.StringType; - -import network.packets.Packet; +import com.projectswg.common.network.NetBuffer; /** * @author Waverunner @@ -142,24 +140,31 @@ public class SuiComponent implements Encodable { @Override public byte[] encode() { - int size = 9; - - for (String param : wideParams) { size += 4 + (param.length() * 2); } - for (String param : narrowParams) { size += 2 + param.length();} - - ByteBuffer bb = ByteBuffer.allocate(size); - Packet.addByte(bb, type.getValue()); - Packet.addList(bb, wideParams, StringType.UNICODE); - Packet.addList(bb, narrowParams, StringType.ASCII); - - return bb.array(); + NetBuffer data = NetBuffer.allocate(getLength()); + data.addByte(type.getValue()); + data.addList(wideParams, StringType.UNICODE); + data.addList(narrowParams, StringType.ASCII); + return data.array(); } @Override - public void decode(ByteBuffer data) { - type = Type.valueOf(Packet.getByte(data)); - wideParams = Packet.getList(data, StringType.UNICODE); - narrowParams = Packet.getList(data, StringType.ASCII); + public void decode(NetBuffer data) { + type = Type.valueOf(data.getByte()); + wideParams = data.getList(StringType.UNICODE); + narrowParams = data.getList(StringType.ASCII); + } + + public int getLength() { + int size = 9; + + for (String param : wideParams) { + size += 4 + (param.length() * 2); + } + for (String param : narrowParams) { + size += 2 + param.length(); + } + + return size; } public enum Type { diff --git a/src/services/chat/ChatMailService.java b/src/services/chat/ChatMailService.java index d9be8a8b8..aa3d96c6b 100644 --- a/src/services/chat/ChatMailService.java +++ b/src/services/chat/ChatMailService.java @@ -243,10 +243,10 @@ public class ChatMailService extends Service { switch (requestType) { case FULL_MESSAGE: - packet = new ChatPersistentMessageToClient(mail, galaxy, false); + packet = new ChatPersistentMessageToClient(mail, false); break; case HEADER_ONLY: - packet = new ChatPersistentMessageToClient(mail, galaxy, true); + packet = new ChatPersistentMessageToClient(mail, true); break; } diff --git a/src/services/dev/DeveloperService.java b/src/services/dev/DeveloperService.java index cd9e5f805..34cea7af6 100644 --- a/src/services/dev/DeveloperService.java +++ b/src/services/dev/DeveloperService.java @@ -62,7 +62,6 @@ public class DeveloperService extends Service { } private void setupCharacterBuilders() { - Location[] cbtLocations = { new Location(-3989, 124, -10, Terrain.DATHOMIR), new Location(-3989, 124, -10, Terrain.DATHOMIR), @@ -76,8 +75,8 @@ public class DeveloperService extends Service { new Location(58, 153, -78, Terrain.TATOOINE) }; - for (int i = 0; i < cbtLocations.length; i++) { - spawnObject("object/tangible/terminal/shared_terminal_character_builder.iff", cbtLocations[i] , TangibleObject.class); + for (Location cbtLocation : cbtLocations) { + spawnObject("object/tangible/terminal/shared_terminal_character_builder.iff", cbtLocation, TangibleObject.class); } } diff --git a/src/services/group/GroupInviterData.java b/src/services/group/GroupInviterData.java index 3cd9da8d1..6bb96f0bd 100644 --- a/src/services/group/GroupInviterData.java +++ b/src/services/group/GroupInviterData.java @@ -27,16 +27,11 @@ package services.group; -import java.nio.ByteBuffer; - import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; -import network.packets.Packet; import resources.player.Player; -/** - * Created by Waverunner on 10/4/2015 - */ public class GroupInviterData implements Encodable { private long id; @@ -54,54 +49,56 @@ public class GroupInviterData implements Encodable { this.name = name; this.counter = counter; } - + @Override public byte[] encode() { - ByteBuffer bb = ByteBuffer.allocate(name.length() + 18); - - Packet.addLong(bb, id); - Packet.addAscii(bb, name); - Packet.addLong(bb, counter); - - return bb.array(); + NetBuffer data = NetBuffer.allocate(getLength()); + data.addLong(id); + data.addAscii(name); + data.addLong(counter); + return data.array(); } - + @Override - public void decode(ByteBuffer data) { - id = Packet.getLong(data); - name = Packet.getAscii(data); - counter = Packet.getLong(data); + public void decode(NetBuffer data) { + id = data.getLong(); + name = data.getAscii(); + counter = data.getLong(); } - - + + @Override + public int getLength() { + return name.length() + 18; + } + public long getId() { return id; } - + public void setId(long id) { this.id = id; } - + public String getName() { return name; } - + public void setName(String name) { this.name = name; } - + public long getCounter() { return counter; } - + public void incrementCounter() { counter++; } - + public Player getSender() { return sender; } - + public void setSender(Player sender) { this.sender = sender; } diff --git a/src/services/map/MapLocation.java b/src/services/map/MapLocation.java index 91b10a617..3c3569ef4 100644 --- a/src/services/map/MapLocation.java +++ b/src/services/map/MapLocation.java @@ -27,15 +27,11 @@ package services.map; -import java.io.Serializable; -import java.nio.ByteBuffer; - +import com.projectswg.common.encoding.CachedEncode; import com.projectswg.common.encoding.Encodable; +import com.projectswg.common.network.NetBuffer; -import network.packets.Packet; - -public class MapLocation implements Encodable, Serializable { - private static final long serialVersionUID = 1L; +public class MapLocation implements Encodable { private long id; private String name; @@ -44,13 +40,15 @@ public class MapLocation implements Encodable, Serializable { private byte category; private byte subcategory; private boolean isActive; - - private byte[] data; - + + private final CachedEncode cache; + public MapLocation() { + this.cache = new CachedEncode(() -> encodeImpl()); } - + public MapLocation(long id, String name, float x, float y, byte category, byte subcategory, boolean isActive) { + this(); this.id = id; this.name = name; this.x = x; @@ -59,92 +57,103 @@ public class MapLocation implements Encodable, Serializable { this.subcategory = subcategory; this.isActive = isActive; } - + public long getId() { return id; } - + public void setId(long id) { + cache.clearCached(); this.id = id; } - + public String getName() { return name; } - + public void setName(String name) { + cache.clearCached(); this.name = name; } - + public float getX() { return x; } - + public void setX(float x) { + cache.clearCached(); this.x = x; } - + public float getY() { return y; } - + public void setY(float y) { + cache.clearCached(); this.y = y; } - + public byte getCategory() { return category; } - + public void setCategory(byte category) { + cache.clearCached(); this.category = category; } - + public byte getSubcategory() { return subcategory; } - + public void setSubcategory(byte subcategory) { + cache.clearCached(); this.subcategory = subcategory; } - + public boolean isActive() { return isActive; } - + public void setIsActive(boolean isActive) { + cache.clearCached(); this.isActive = isActive; } - + @Override public byte[] encode() { - if (data != null) - return data; - - ByteBuffer bb = ByteBuffer.allocate((name.length() * 2) + 23); - Packet.addLong(bb, id); - Packet.addUnicode(bb, name); - Packet.addFloat(bb, x); - Packet.addFloat(bb, y); - Packet.addByte(bb, category); - Packet.addByte(bb, subcategory); - Packet.addBoolean(bb, isActive); - - data = bb.array(); - return data; + return cache.encode(); } - + @Override - public void decode(ByteBuffer data) { - id = Packet.getLong(data); - name = Packet.getUnicode(data); - x = Packet.getFloat(data); - y = Packet.getFloat(data); - category = Packet.getByte(data); - subcategory = Packet.getByte(data); - isActive = Packet.getBoolean(data); + public void decode(NetBuffer data) { + id = data.getLong(); + name = data.getUnicode(); + x = data.getFloat(); + y = data.getFloat(); + category = data.getByte(); + subcategory = data.getByte(); + isActive = data.getBoolean(); } - + + private byte [] encodeImpl() { + NetBuffer data = NetBuffer.allocate(getLength()); + data.addLong(id); + data.addUnicode(name); + data.addFloat(x); + data.addFloat(y); + data.addByte(category); + data.addByte(subcategory); + data.addBoolean(isActive); + return data.array(); + } + + @Override + public int getLength() { + return name.length() * 2 + 23; + } + @Override public String toString() { return name + " x: " + x + "y: " + y; diff --git a/src/services/network/NetworkProtocol.java b/src/services/network/NetworkProtocol.java index 4f30fb420..07e7abec7 100644 --- a/src/services/network/NetworkProtocol.java +++ b/src/services/network/NetworkProtocol.java @@ -28,10 +28,9 @@ package services.network; import java.io.EOFException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; import com.projectswg.common.debug.Assert; +import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.NetBufferStream; import network.PacketType; @@ -42,13 +41,13 @@ import network.packets.swg.zone.object_controller.ObjectController; public class NetworkProtocol { - public ByteBuffer encode(Packet p) { - ByteBuffer encoded = p.encode(); + public NetBuffer encode(Packet p) { + NetBuffer encoded = p.encode(); encoded.position(0); int decompressedLength = encoded.remaining(); boolean compressed = false; if (compressed) { - ByteBuffer compress = compress(encoded); + NetBuffer compress = compress(encoded); compressed = compress != encoded; encoded = compress; } @@ -88,26 +87,26 @@ public class NetworkProtocol { return processSWG(pData); } - private ByteBuffer compress(ByteBuffer data) { - ByteBuffer compressedBuffer = ByteBuffer.allocate(Compression.getMaxCompressedLength(data.remaining())); + private NetBuffer compress(NetBuffer data) { + NetBuffer compressedBuffer = NetBuffer.allocate(Compression.getMaxCompressedLength(data.remaining())); int length = Compression.compress(data.array(), compressedBuffer.array()); - compressedBuffer.position(0); - compressedBuffer.limit(length); + compressedBuffer.position(length); + compressedBuffer.flip(); if (length >= data.remaining()) return data; else return compressedBuffer; } - private ByteBuffer preparePacket(ByteBuffer packet, boolean compressed, int rawLength) { - ByteBuffer data = ByteBuffer.allocate(packet.remaining() + 5).order(ByteOrder.LITTLE_ENDIAN); + private NetBuffer preparePacket(NetBuffer packet, boolean compressed, int rawLength) { + NetBuffer data = NetBuffer.allocate(packet.remaining() + 5); byte bitmask = 0; bitmask |= (compressed?1:0) << 0; // Compressed bitmask |= 1 << 1; // SWG - data.put(bitmask); - data.putShort((short) packet.remaining()); - data.putShort((short) rawLength); - data.put(packet); + data.addByte(bitmask); + data.addShort((short) packet.remaining()); + data.addShort((short) rawLength); + data.addRawArray(packet.array()); data.flip(); return data; } @@ -115,11 +114,13 @@ public class NetworkProtocol { private SWGPacket processSWG(byte [] data) throws EOFException { if (data.length < 6) throw new EOFException("Length too small: " + data.length); - ByteBuffer buffer = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN); - int crc = buffer.getInt(2); - if (crc == 0x80CE5E46) + NetBuffer buffer = NetBuffer.wrap(data); + buffer.getShort(); + int crc = buffer.getInt(); + buffer.position(0); + if (crc == 0x80CE5E46) { return ObjectController.decodeController(buffer); - else { + } else { SWGPacket packet = PacketType.getForCrc(crc); if (packet != null) packet.decode(buffer); diff --git a/src/services/network/PacketSender.java b/src/services/network/PacketSender.java index e59c8e7f2..327b9bcbb 100644 --- a/src/services/network/PacketSender.java +++ b/src/services/network/PacketSender.java @@ -29,9 +29,9 @@ package services.network; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.nio.ByteBuffer; import com.projectswg.common.debug.Log; +import com.projectswg.common.network.NetBuffer; import resources.network.TCPServer; @@ -43,15 +43,15 @@ public class PacketSender { this.tcpServer = server; } - public void sendPacket(SocketAddress addr, ByteBuffer data) { + public void sendPacket(SocketAddress addr, NetBuffer data) { if (addr instanceof InetSocketAddress) sendPacket((InetSocketAddress) addr, data); else Log.e("Unknown socket address: %s", addr); } - public void sendPacket(InetSocketAddress addr, ByteBuffer data) { - tcpServer.send(addr, data); + public void sendPacket(InetSocketAddress addr, NetBuffer data) { + tcpServer.send(addr, data.getBuffer()); } } diff --git a/src/services/player/LoginService.java b/src/services/player/LoginService.java index cd5dbb955..dccdf42ba 100644 --- a/src/services/player/LoginService.java +++ b/src/services/player/LoginService.java @@ -255,7 +255,7 @@ public class LoginService extends Service { LoginEnumCluster cluster = new LoginEnumCluster(); LoginClusterStatus clusterStatus = new LoginClusterStatus(); List galaxies = getGalaxies(player); - SWGCharacter [] characters = getCharacters(player.getUserId()); + List characters = getCharacters(player.getUserId()); for (Galaxy g : galaxies) { cluster.addGalaxy(g); clusterStatus.addGalaxy(g); @@ -304,7 +304,7 @@ public class LoginService extends Service { return galaxies; } - private SWGCharacter [] getCharacters(int userId) { + private List getCharacters(int userId) { List characters = new ArrayList<>(); synchronized (getCharacters) { try { @@ -324,7 +324,7 @@ public class LoginService extends Service { Log.e(e); } } - return characters.toArray(new SWGCharacter[characters.size()]); + return characters; } private boolean deleteCharacter(SWGObject obj) {