diff --git a/modules/LimboDefaultCmd.jar b/modules/LimboDefaultCmd.jar deleted file mode 100644 index 5fa0d06..0000000 Binary files a/modules/LimboDefaultCmd.jar and /dev/null differ diff --git a/pom.xml b/pom.xml index 2d52788..274a424 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.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;