Files
Sudoku/app/src/main/java/network/server/KeepAliveHandler.java
Persson-dev bfe98a2cf0
Some checks failed
Linux arm64 / Build (push) Has been cancelled
better network structure
2025-01-23 22:24:23 +01:00

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));
}
}