From 224e12a6a8ae7299765171f6878c384a73692736 Mon Sep 17 00:00:00 2001 From: LOOHP Date: Mon, 6 Dec 2021 20:42:49 +0000 Subject: [PATCH] Fixed keepalive packet issue --- modules/LimboDefaultCmd.jar | Bin 4488 -> 0 bytes pom.xml | 2 +- .../loohp/limbo/server/ClientConnection.java | 42 +++++++++++++++++- .../loohp/limbo/server/KeepAliveSender.java | 40 ----------------- .../loohp/limbo/server/ServerConnection.java | 8 ---- 5 files changed, 41 insertions(+), 51 deletions(-) delete mode 100644 modules/LimboDefaultCmd.jar delete mode 100644 src/main/java/com/loohp/limbo/server/KeepAliveSender.java diff --git a/modules/LimboDefaultCmd.jar b/modules/LimboDefaultCmd.jar deleted file mode 100644 index 5fa0d06585b8f5858f88531749d3acc9b1538376..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4488 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.loohp Limbo Limbo - 0.6.7-ALPHA + 0.6.8-ALPHA Standalone Limbo Minecraft Server. https://github.com/LOOHP/Limbo diff --git a/src/main/java/com/loohp/limbo/server/ClientConnection.java b/src/main/java/com/loohp/limbo/server/ClientConnection.java index 7068d4a..f769298 100644 --- a/src/main/java/com/loohp/limbo/server/ClientConnection.java +++ b/src/main/java/com/loohp/limbo/server/ClientConnection.java @@ -12,6 +12,8 @@ import java.util.List; import java.util.Optional; import java.util.Random; import java.util.Set; +import java.util.Timer; +import java.util.TimerTask; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -55,6 +57,7 @@ import com.loohp.limbo.server.packets.PacketPlayOutDisconnect; import com.loohp.limbo.server.packets.PacketPlayOutEntityMetadata; import com.loohp.limbo.server.packets.PacketPlayOutGameState; import com.loohp.limbo.server.packets.PacketPlayOutHeldItemChange; +import com.loohp.limbo.server.packets.PacketPlayOutKeepAlive; import com.loohp.limbo.server.packets.PacketPlayOutLogin; import com.loohp.limbo.server.packets.PacketPlayOutPlayerAbilities; import com.loohp.limbo.server.packets.PacketPlayOutPlayerAbilities.PlayerAbilityFlags; @@ -104,7 +107,9 @@ public class ClientConnection extends Thread { private boolean running; private ClientState state; - private Player player; + private Player player; + private TimerTask keepAliveTask; + private AtomicLong lastPacketTimestamp; private AtomicLong lastKeepAlivePayLoad; private DataOutputStream output; @@ -117,7 +122,8 @@ public class ClientConnection extends Thread { public ClientConnection(Socket client_socket) { this.client_socket = client_socket; this.inetAddress = client_socket.getInetAddress(); - this.lastKeepAlivePayLoad = new AtomicLong(); + this.lastPacketTimestamp = new AtomicLong(-1); + this.lastKeepAlivePayLoad = new AtomicLong(-1); this.running = false; this.ready = false; } @@ -133,6 +139,18 @@ public class ClientConnection extends Thread { public void setLastKeepAlivePayLoad(long payLoad) { this.lastKeepAlivePayLoad.set(payLoad); } + + public long getLastPacketTimestamp() { + return lastPacketTimestamp.get(); + } + + public void setLastPacketTimestamp(long payLoad) { + this.lastPacketTimestamp.set(payLoad); + } + + public TimerTask getKeepAliveTask() { + return this.keepAliveTask; + } public Player getPlayer() { return player; @@ -159,6 +177,7 @@ public class ClientConnection extends Thread { DataTypeIO.writeVarInt(output, packetByte.length); output.write(packetByte); output.flush(); + setLastPacketTimestamp(System.currentTimeMillis()); } public void disconnect(BaseComponent[] reason) { @@ -436,6 +455,25 @@ public class ClientConnection extends Thread { player.setPlayerListHeaderFooter(properties.getTabHeader(), properties.getTabFooter()); ready = true; + + keepAliveTask = new TimerTask() { + @Override + public void run() { + if (ready) { + long now = System.currentTimeMillis(); + if (now - getLastPacketTimestamp() > 15000) { + PacketPlayOutKeepAlive keepAlivePacket = new PacketPlayOutKeepAlive(now); + try { + sendPacket(keepAlivePacket); + setLastKeepAlivePayLoad(now); + } catch (Exception e) {} + } + } else { + this.cancel(); + } + } + }; + new Timer().schedule(keepAliveTask, 5000, 10000); while (client_socket.isConnected()) { try { diff --git a/src/main/java/com/loohp/limbo/server/KeepAliveSender.java b/src/main/java/com/loohp/limbo/server/KeepAliveSender.java deleted file mode 100644 index b7eae26..0000000 --- a/src/main/java/com/loohp/limbo/server/KeepAliveSender.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.loohp.limbo.server; - -import java.io.IOException; -import java.util.Random; -import java.util.concurrent.TimeUnit; - -import com.loohp.limbo.Limbo; -import com.loohp.limbo.server.ClientConnection.ClientState; -import com.loohp.limbo.server.packets.PacketPlayOutKeepAlive; - -public class KeepAliveSender extends Thread { - - private Random random; - - public KeepAliveSender() { - random = new Random(); - start(); - } - - @Override - public void run() { - while (true) { - try { - for (ClientConnection client : Limbo.getInstance().getServerConnection().getClients()) { - if (client.getClientState() != null && client.getClientState().equals(ClientState.PLAY)) { - try { - PacketPlayOutKeepAlive packet = new PacketPlayOutKeepAlive(random.nextLong()); - client.setLastKeepAlivePayLoad(packet.getPayload()); - client.sendPacket(packet); - } catch (IOException ignore) {} - } - } - TimeUnit.SECONDS.sleep(5); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - -} diff --git a/src/main/java/com/loohp/limbo/server/ServerConnection.java b/src/main/java/com/loohp/limbo/server/ServerConnection.java index e8298bf..e55245a 100644 --- a/src/main/java/com/loohp/limbo/server/ServerConnection.java +++ b/src/main/java/com/loohp/limbo/server/ServerConnection.java @@ -15,14 +15,12 @@ public class ServerConnection extends Thread { private List clients; private String ip; private int port; - private KeepAliveSender keepAliveSender; public ServerConnection(String ip, int port) { clients = new ArrayList(); this.ip = ip; this.port = port; start(); - keepAliveSender = new KeepAliveSender(); } @Override @@ -32,8 +30,6 @@ public class ServerConnection extends Thread { Limbo.getInstance().getConsole().sendMessage("Limbo server listening on /" + serverSocket.getInetAddress().getHostName() + ":" + serverSocket.getLocalPort()); while (true) { Socket connection = serverSocket.accept(); - //String str = connection.getInetAddress().getHostName() + ":" + connection.getPort(); - //Limbo.getInstance().getConsole().sendMessage("[/127.0.0.1:57310] <-> InitialHandler has pinged); ClientConnection sc = new ClientConnection(connection); clients.add(sc); sc.start(); @@ -42,10 +38,6 @@ public class ServerConnection extends Thread { e.printStackTrace(); } } - - public KeepAliveSender getKeepAliveSender() { - return keepAliveSender; - } public ServerSocket getServerSocket() { return serverSocket;