private boolean packetProcess() {
if (disconnected || in == null) {
return false;
}
try {
int avail = in.available();
if (avail == 0) {
return false;
}
if (packetType == -1) {
packetType = in.read() & 0xFF;
if (inStreamDecryption != null) {
packetType = (packetType - inStreamDecryption.getNextKey()) & 0xFF;
}
packetSize = getPacketSize(packetType);
if (packetSize == OPCODE_OUT_OF_RANGE_SIZE) {
resetPacket();
return false;
}
}
if (packetSize == -1 && avail > 0) {
packetSize = in.read() & 0xFF;
avail--;
}
if (avail < packetSize) {
return false;
}
fillInStream(packetSize);
timeOutCounter = 0;
parseIncomingPackets();
resetPacket();
} catch (Exception e) {
e.printStackTrace();
disconnected = true;
System.out.println("Godzhell Reborn Server [fatal] - exception");
}
return true;
}
private void resetPacket() {
packetType = -1;
packetSize = -1;
}
public static final int[] packetSizes = {
0, 0, 0, 1, -1, 0, 0, 0, 0, 0, //0 - 9
0, 0, 0, 0, 8, 0, 6, 2, 2, 0, //10 - 19
0, 2, 0, 6, 0, 12, 0, 0, 0, 0, //20 - 29
0, 0, 0, 0, 0, 8, 4, 0, 0, 2, //30 - 39
2, 6, 0, 6, 0, -1, 0, 0, 0, 0, //40 - 49
0, 0, 0, 12, 0, 0, 0, 8, 8, 0, //50 - 59
8, 8, 0, 0, 0, 0, 0, 0, 0, 0, //60 - 69
8, 0, 2, 2, 8, 6, 0, -1, 0, 6, //70 - 79
0, 0, 0, 0, 0, 1, 4, 6, 0, 0, //80 - 89
0, 0, 0, 0, 0, 3, 0, 0, -1, 0, //90 - 99
0, 26, 0, -1, 0, 0, 0, 0, 0, 0, //100 - 109
0, 0, 0, 0, 0, 0, 0, 6, 0, 0, //110 - 119
1, 0, 6, 0, 0, 0, -1, -1, 2, 6, //120 - 129
0, 4, 8, 8, 0, 6, 0, 0, 0, 2, //130 - 139
6, 10, -1, 0, 0, 6, 0, 0, 0, 0, //140 - 149
0, 0, 1, 2, 0, 2, 6, 0, 0, 0, //150 - 159
0, 0, 0, 0, -1, -1, 0, 0, 0, 0, //160 - 169
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //170 - 179
0, 8, 0, 3, 0, 2, 0, 0, 8, 1, //180 - 189
0, 0, 14, 0, 0, 0, 0, 0, 0, 1, //190 - 199
2, 0, 0, 0, 0, 0, 0, 0, 4, 0, //200 - 209
4, 0, 0, 4, 7, 8, 0, 0, 10, 0, //210 - 219
0, 0, 0, 0, 0, 0, -1, 0, 8, 0, //220 - 229
1, 0, 0, 0, 8, 0, 6, 8, 1, 0, //230 - 239
0, 4, 0, 0, 0, 0, -1, 0, -1, 4, //240 - 249
0, 0, 8, 6, 0, 0, 0, //250 - 255
};
public static final int OPCODE_OUT_OF_RANGE_SIZE = -5000;
public static int getPacketSize(int opcode) {
if (opcode < 0 || opcode >= packetSizes.length)
return OPCODE_OUT_OF_RANGE_SIZE;
return packetSizes[opcode];
}