From 20405670ef660c3647a85ce61ea04324386d1b3f Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 5 Dec 2017 15:58:58 +0100 Subject: [PATCH] #235 - added local server shutdown route --- .../ui/controller/Controller.java | 27 ++++------- .../LocalServerSettingsController.java | 3 +- .../serverconnection/ServerConnection.java | 20 +++++++- .../server/SparkServer.java | 2 + .../server/shutdown/Shutdown.java | 46 +++++++++++++++++++ 5 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 BudgetMasterServer/src/main/java/de/deadlocker8/budgetmasterserver/server/shutdown/Shutdown.java 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 83594f13c..f27efd179 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 422191916..0429ffb17 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 cd04ca5d7..8db77ff05 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 b60309e10..d1b65757c 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 000000000..95a6653d2 --- /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 -- GitLab