diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java index 83594f13ce7df8fbc9ceb29181e61f59e38b032d..f27efd179b5bef763882fe3eece03f01e20a1509 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java @@ -107,7 +107,6 @@ public class Controller extends BaseController private Payment selectedPayment; private SearchPreferences searchPreferences; private CommandLine cmd; - private Process localServerProcess; private boolean alertIsShowing = false; private static DateTimeFormatter DATE_FORMAT; @@ -132,27 +131,26 @@ public class Controller extends BaseController stage.setMinHeight(650); stage.getScene().getStylesheets().add("/de/deadlocker8/budgetmaster/ui/style.css"); } - + @Override public void init() { getStage().setOnCloseRequest((event)->{ - if(localServerProcess != null) - { - Logger.debug("Stopping local BudgetMasterServer..."); - localServerProcess.destroy(); - } Worker.shutdown(); - System.exit(0); }); Runtime.getRuntime().addShutdownHook(new Thread(() -> { - Logger.debug("Received shutdown hook"); - if(localServerProcess != null) + Logger.debug("Stopping local BudgetMasterServer..."); + try { - Logger.debug("Stopping local BudgetMasterServer..."); - localServerProcess.destroy(); + ServerConnection connection = new ServerConnection(settings); + connection.shutdownServer(); } + catch(Exception e) + { + Logger.error(e); + } + System.exit(0); })); if(settings.getServerType() == null) @@ -330,11 +328,6 @@ public class Controller extends BaseController { this.settings = settings; } - - public void setLocalServerProcess(Process process) - { - this.localServerProcess = process; - } public void showNotification(String text) { diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java index 4221919161fbfeb1fc69addd698f755a0c266018..0429ffb17eb32eb8e2ca2fc32ad34843164c2e2f 100644 --- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java +++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/LocalServerSettingsController.java @@ -151,9 +151,10 @@ public class LocalServerSettingsController extends SettingsController { Logger.debug("Starting local Server..."); serverHandler.createServerSettingsIfNotExists(); - controller.setLocalServerProcess(serverHandler.startServer()); + serverHandler.startServer(); try { + //DEBUG magic number Thread.sleep(2000); } catch(InterruptedException e) diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java index cd04ca5d70863a407fd6ca139a189ea4eb86570d..8db77ff05b51e2eb8bc5809cb8ba1d2967b160b5 100644 --- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java +++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/serverconnection/ServerConnection.java @@ -614,6 +614,24 @@ public class ServerConnection else { throw new ServerConnectionException(String.valueOf(httpsCon.getResponseCode())); - } + } + } + + public void shutdownServer() throws Exception + { + URL url = new URL(settings.getUrl() + "/shutdown?secret=" + Helpers.getURLEncodedString(settings.getSecret())); + HttpsURLConnection httpsCon = (HttpsURLConnection)url.openConnection(); + httpsCon.setRequestMethod("DELETE"); + httpsCon.setDoInput(true); + if(httpsCon.getResponseCode() == HttpsURLConnection.HTTP_OK) + { + InputStream stream = httpsCon.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + reader.close(); + } + else + { + throw new ServerConnectionException(String.valueOf(httpsCon.getResponseCode())); + } } } \ No newline at end of file diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java index b60309e10941d62ec55faf8fc3e8fa88d10a0dd9..d1b65757c09ad2ec48fa5a299a4abf731af4886a 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -49,6 +49,7 @@ import de.deadlocker8.budgetmasterserver.server.payment.repeating.RepeatingPayme import de.deadlocker8.budgetmasterserver.server.payment.search.PaymentMaxAmount; import de.deadlocker8.budgetmasterserver.server.payment.search.PaymentSearch; import de.deadlocker8.budgetmasterserver.server.rest.RestGet; +import de.deadlocker8.budgetmasterserver.server.shutdown.Shutdown; import de.deadlocker8.budgetmasterserver.server.tag.match.TagMatchAddForPayment; import de.deadlocker8.budgetmasterserver.server.tag.match.TagMatchAddForRepeatingPayment; import de.deadlocker8.budgetmasterserver.server.tag.match.TagMatchDeleteForPayment; @@ -198,6 +199,7 @@ public class SparkServer get("/info", new InformationGet(gson, versionInfo, settings)); get("/version", new VersionGet(gson, versionInfo)); delete("/log", new LogDelete()); + delete("/shutdown", new Shutdown()); } catch(ClassNotFoundException e) { diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/shutdown/Shutdown.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/shutdown/Shutdown.java new file mode 100644 index 0000000000000000000000000000000000000000..95a6653d2bb299d72933557c88ce962a3730d542 --- /dev/null +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/shutdown/Shutdown.java @@ -0,0 +1,46 @@ +package de.deadlocker8.budgetmasterserver.server.shutdown; + +import java.util.Timer; +import java.util.TimerTask; + +import de.deadlocker8.budgetmasterserver.logic.AdvancedRoute; +import logger.Logger; +import spark.Request; +import spark.Response; + +public class Shutdown implements AdvancedRoute +{ + public Shutdown() + { + + } + + @Override + public void before() + { + } + + @Override + public Object handleRequest(Request req, Response res) + { + Logger.info("Shutting down server due to client request"); + TimerTask task = new TimerTask() + { + @Override + public void run() + { + Logger.info("Shutdown DONE"); + System.exit(0); + } + }; + + Timer timer = new Timer(); + timer.schedule(task, 2000); + return ""; + } + + @Override + public void after() + { + } +} \ No newline at end of file