diff --git a/zond/src/main/java/asys/zond/ZondCommandHandler.java b/zond/src/main/java/asys/zond/ZondCommandHandler.java index 4d9e736..40761d2 100644 --- a/zond/src/main/java/asys/zond/ZondCommandHandler.java +++ b/zond/src/main/java/asys/zond/ZondCommandHandler.java @@ -26,6 +26,8 @@ public class ZondCommandHandler implements CommandHandler { private PingMonitor pingMonitor; private boolean flagForceRestartProcess = false; private boolean flagManualKill = false; + private boolean flagTicker = false; + private Thread threadTicker; ZondCommandHandler(PipeInputStream proxyStdIn) { this.proxyStdIn = proxyStdIn; @@ -37,6 +39,22 @@ public class ZondCommandHandler implements CommandHandler { .reset().toString(); } + private void buildThreadTicker() { + threadTicker = new Thread(() -> { + int sec = 0; + while (!Thread.currentThread().isInterrupted() && flagTicker) { + Shell.getInstance().getOutput().println(zondColored( + Ansi.ansi().fg(Ansi.Color.CYAN).a("Tick "+(sec++)+" sec").toString() + )); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + }, "Thread Ticker"); + } + @Override public void handle(String commandLine) { if (commandLine.startsWith(":")) { @@ -70,6 +88,9 @@ public class ZondCommandHandler implements CommandHandler { } catch (IOException e) { e.printStackTrace(); } + } else if (line.equalsIgnoreCase("ticker")) { + flagTicker = !flagTicker; + Shell.getInstance().getOutput().println(zondColored("Ticker " + (flagTicker?"on":"off"))); } } @@ -110,12 +131,23 @@ public class ZondCommandHandler implements CommandHandler { server.start(Config.getInstance().getInt("bridge.port")); deadTime = (System.currentTimeMillis()/1000) + (delay*1000); - pingMonitor.start(() -> { - Shell.getInstance().getOutput().println(zondColored("[!] Process - zobie?")); - Shell.getInstance().getOutput().println(zondColored("[!] Force shutdown process.")); - flagForceRestartProcess = true; - killProcess(); - }); + Runnable callback; + if (flagTicker) { + callback = () -> { + Shell.getInstance().getOutput().println(zondColored("[!] Process - zobie?")); + }; + + buildThreadTicker(); + threadTicker.start(); + } else { + callback = () -> { + Shell.getInstance().getOutput().println(zondColored("[!] Process - zobie?")); + Shell.getInstance().getOutput().println(zondColored("[!] Force shutdown process.")); + flagForceRestartProcess = true; + killProcess(); + }; + } + pingMonitor.start(callback); code = executor.execute(commandLine); } catch (ExecuteException e) { code = e.getExitValue(); @@ -133,6 +165,8 @@ public class ZondCommandHandler implements CommandHandler { if (pingMonitor.isCorrectShutdown()) { flagForceRestartProcess = false; _try = 0; + if (flagTicker) + threadTicker.interrupt(); break; } else { if (currTime <= deadTime && !flagManualKill) { @@ -168,6 +202,8 @@ public class ZondCommandHandler implements CommandHandler { pingMonitor.stop(); watchdog.destroyProcess(); threadExec.interrupt(); + if (threadTicker != null) + threadTicker.interrupt(); } } }