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;