This commit is contained in:
49
app/src/main/java/network/server/KeepAliveHandler.java
Normal file
49
app/src/main/java/network/server/KeepAliveHandler.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package network.server;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import network.protocol.packets.KeepAlivePacket;
|
||||
|
||||
public class KeepAliveHandler {
|
||||
|
||||
private final ServerConnexion serverConnexion;
|
||||
|
||||
private static final int KEEP_ALIVE_COOLDOWN = 5 * 1000;
|
||||
|
||||
private long lastKeepAlive = 0;
|
||||
private long lastSend = 0;
|
||||
private volatile boolean keepAliveRecieved = false;
|
||||
|
||||
public KeepAliveHandler(ServerConnexion serverConnexion) {
|
||||
this.serverConnexion = serverConnexion;
|
||||
sendKeepAlive();
|
||||
}
|
||||
|
||||
public boolean update() {
|
||||
var currentTime = System.currentTimeMillis();
|
||||
if (currentTime - lastSend > KEEP_ALIVE_COOLDOWN) {
|
||||
if (keepAliveRecieved) {
|
||||
sendKeepAlive();
|
||||
} else {
|
||||
System.out.println("Zombie");
|
||||
serverConnexion.close();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void recievedKeepAlive(long keepAliveId) {
|
||||
if (lastKeepAlive == keepAliveId)
|
||||
this.keepAliveRecieved = true;
|
||||
}
|
||||
|
||||
private void sendKeepAlive() {
|
||||
Random r = new Random();
|
||||
lastKeepAlive = r.nextLong();
|
||||
lastSend = System.currentTimeMillis();
|
||||
keepAliveRecieved = false;
|
||||
this.serverConnexion.sendPacket(new KeepAlivePacket(lastKeepAlive));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user