Refactored SuiWindow's to implement Encodable

Added new list methods to Packet class for Strings
Removed duplicate addArray method in Packet class (the same as addData)
This commit is contained in:
Waverunner
2015-08-12 12:47:45 -04:00
parent 017cf5f268
commit 39a3dee2a8
11 changed files with 263 additions and 135 deletions
+52 -7
View File
@@ -29,6 +29,7 @@ package network.packets;
import resources.common.CRC;
import resources.encodables.Encodable;
import utilities.Encoder;
import java.net.InetAddress;
import java.nio.ByteBuffer;
@@ -91,6 +92,26 @@ public class Packet {
}
}
public static void addList(ByteBuffer bb, List<byte[]> list) {
addInt(bb, list.size());
for (byte[] bytes : list) {
addData(bb, bytes);
}
}
public static void addList(ByteBuffer bb, List<String> list, Encoder.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: System.err.println("Cannot encode StringType " + type);
break;
}
}
public static void addBoolean(ByteBuffer bb, boolean b) {
bb.put(b ? (byte) 1 : (byte) 0);
}
@@ -143,10 +164,6 @@ public class Packet {
bb.put(data);
}
public static void addArray(ByteBuffer bb, byte[] b) {
bb.put(b);
}
public static void addArrayList(ByteBuffer bb, byte[] b) {
addShort(bb, b.length);
bb.put(b);
@@ -237,12 +254,16 @@ public class Packet {
* @return Amount of bytes that are read
*/
public static <T extends Encodable> List<T> getList(ByteBuffer bb, Class<T> type) {
List<T> list = new ArrayList<>();
int size = getInt(bb);
if (size <= 0)
if (size < 0) {
System.err.println("Read list with size less than zero!");
return null;
} else if (size == 0) {
return new ArrayList<>();
}
List<T> list = new ArrayList<>();
try {
for (int i = 0; i < size; i++) {
@@ -271,6 +292,30 @@ public class Packet {
return instance;
}
public static List<String> getList(ByteBuffer bb, Encoder.StringType type) {
int size = getInt(bb);
if (size < 0) {
System.err.println("Read list with size less than zero!");
return null;
} else if (size == 0) {
return new ArrayList<>();
}
List<String> 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: System.err.println("Do not know how to read list of StringType " + type);
break;
}
return list;
}
public void decode(ByteBuffer data) {
data.position(0);
this.data = data;