mirror of
https://github.com/ProjectSWGCore/forwarder.git
synced 2026-07-13 21:01:11 -04:00
Fixed some synchronization bugs
This commit is contained in:
@@ -27,12 +27,6 @@ public class ClientConnection extends Manager {
|
||||
return interceptor.getProperties();
|
||||
}
|
||||
|
||||
public boolean initialize() {
|
||||
if (!super.initialize())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean start() {
|
||||
if (!super.start())
|
||||
return false;
|
||||
|
||||
@@ -65,12 +65,12 @@ public class ClientSender extends Service {
|
||||
port = 0;
|
||||
zone = false;
|
||||
serverRunning.set(false);
|
||||
packager.start();
|
||||
resender.start();
|
||||
try {
|
||||
loginServer = new UDPServer(loginPort, 496);
|
||||
zoneServer = new UDPServer(0, 496);
|
||||
loginPort = loginServer.getPort();
|
||||
packager.start();
|
||||
resender.start();
|
||||
serverRunning.set(true);
|
||||
} catch (BindException e) {
|
||||
Log.err(this, "Failed to bind UDP servers! Login Port: " + loginPort);
|
||||
|
||||
@@ -160,15 +160,20 @@ public class ServerConnection extends Manager {
|
||||
}
|
||||
|
||||
private boolean processPacket() {
|
||||
bufferStream.mark();
|
||||
byte bitmask = bufferStream.getByte();
|
||||
short messageLength = bufferStream.getShort();
|
||||
short decompressedLength = bufferStream.getShort();
|
||||
if (bufferStream.remaining() < messageLength) {
|
||||
bufferStream.rewind();
|
||||
return false;
|
||||
byte bitmask;
|
||||
short messageLength, decompressedLength;
|
||||
byte [] message;
|
||||
synchronized (bufferStream) {
|
||||
bufferStream.mark();
|
||||
bitmask = bufferStream.getByte();
|
||||
messageLength = bufferStream.getShort();
|
||||
decompressedLength = bufferStream.getShort();
|
||||
if (bufferStream.remaining() < messageLength) {
|
||||
bufferStream.rewind();
|
||||
return false;
|
||||
}
|
||||
message = bufferStream.getArray(messageLength);
|
||||
}
|
||||
byte [] message = bufferStream.getArray(messageLength);
|
||||
if ((bitmask & 1) != 0) // Compressed
|
||||
message = Compression.decompress(message, decompressedLength);
|
||||
if (message.length < 6)
|
||||
@@ -292,17 +297,19 @@ public class ServerConnection extends Manager {
|
||||
}
|
||||
|
||||
private void process() {
|
||||
while (bufferStream.remaining() >= 5) {
|
||||
if (!processPacket())
|
||||
break;
|
||||
}
|
||||
synchronized (bufferMutex) {
|
||||
while (bufferStream.remaining() >= 5) {
|
||||
if (!processPacket())
|
||||
break;
|
||||
}
|
||||
bufferStream.compact();
|
||||
}
|
||||
}
|
||||
|
||||
private void reset() {
|
||||
bufferStream.reset();
|
||||
synchronized (bufferMutex) {
|
||||
bufferStream.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean connect() {
|
||||
|
||||
@@ -87,6 +87,11 @@ public class UDPServer {
|
||||
}
|
||||
|
||||
public int getPort() {
|
||||
port = socket.getLocalPort();
|
||||
while (port == 0) {
|
||||
port = socket.getLocalPort();
|
||||
try { Thread.sleep(5); } catch (InterruptedException e) { break; }
|
||||
}
|
||||
return port;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user