diff --git a/zond/src/main/java/asys/zond/ZondCommandHandler.java b/zond/src/main/java/asys/zond/ZondCommandHandler.java index bc13f4b..481d1ef 100644 --- a/zond/src/main/java/asys/zond/ZondCommandHandler.java +++ b/zond/src/main/java/asys/zond/ZondCommandHandler.java @@ -64,6 +64,7 @@ public class ZondCommandHandler implements CommandHandler { } else if (line.equalsIgnoreCase("connect")) { Connector.getInstance().startReconnect(); } else if (line.equalsIgnoreCase("disconnect")) { + Shell.getInstance().getOutput().println("Disconnect"); Connector.getInstance().shutdown(); } else if (line.equalsIgnoreCase("reload")) { Shell.getInstance().getOutput().println("Reload config"); diff --git a/zond/src/main/java/asys/zond/proxy/Client.java b/zond/src/main/java/asys/zond/proxy/Client.java index 5500af6..d9c4e61 100644 --- a/zond/src/main/java/asys/zond/proxy/Client.java +++ b/zond/src/main/java/asys/zond/proxy/Client.java @@ -33,8 +33,11 @@ public class Client { } public void disconnect() { - channelFuture.channel().close(); - group.shutdownGracefully(); + if (isConnected()) { + channelFuture.channel().close(); + channelFuture = null; + group.shutdownGracefully(); + } } public boolean isConnected() { diff --git a/zond/src/main/java/asys/zond/proxy/Connector.java b/zond/src/main/java/asys/zond/proxy/Connector.java index 496e057..ef980a8 100644 --- a/zond/src/main/java/asys/zond/proxy/Connector.java +++ b/zond/src/main/java/asys/zond/proxy/Connector.java @@ -23,7 +23,8 @@ public class Connector { } public void startReconnect() { - if (connectTicker != null && connectTicker.isActive()) return; + if ((connectTicker != null && connectTicker.isActive()) || + (client != null && client.isConnected())) return; client = new Client(); connectTicker = new TaskTicker().setStepTimeMs(5000L); connectTicker.setTask(() -> {