50 lines
1.1 KiB
Java
50 lines
1.1 KiB
Java
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));
|
|
}
|
|
|
|
}
|