From 4a3fcd2f455400b7b5de8494aacd0a67cab5e8d3 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 6 Aug 2018 20:14:13 +0200 Subject: [PATCH 1/3] Add exports for GameEngine#shutDown Signed-off-by: Tomas Slusny --- runelite-api/src/main/java/net/runelite/api/GameEngine.java | 5 +++++ .../src/main/java/net/runelite/rs/api/RSGameEngine.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/GameEngine.java b/runelite-api/src/main/java/net/runelite/api/GameEngine.java index 7a09406875..1e1ffacbde 100644 --- a/runelite-api/src/main/java/net/runelite/api/GameEngine.java +++ b/runelite-api/src/main/java/net/runelite/api/GameEngine.java @@ -51,4 +51,9 @@ public interface GameEngine * @return true if on the main thread, false otherwise */ boolean isClientThread(); + + /** + * Shut downs all open connections and files in client and serializes not serialized data. + */ + void shutDown(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java index 8c0024c691..c535606108 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java @@ -33,4 +33,7 @@ public interface RSGameEngine extends GameEngine, KeyFocusListener { @Import("canvas") Canvas getCanvas(); + + @Import("shutDown") + void shutDown(); } From 69a6092eb74b90b1db9220480e542ff22e9890c6 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 30 Jul 2018 13:54:01 +0200 Subject: [PATCH 2/3] Properly shutdown everything on window close - Properly shutdown applet on window close - Properly remove system tray icon on close - Shutdown executorService on shutdown Signed-off-by: Tomas Slusny --- .../main/java/net/runelite/client/RuneLite.java | 5 +++++ .../java/net/runelite/client/ui/ClientUI.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 986cf46a6d..d2a72afedb 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -35,6 +35,7 @@ import java.io.File; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.util.Locale; +import java.util.concurrent.ScheduledExecutorService; import javax.annotation.Nullable; import javax.inject.Provider; import javax.inject.Singleton; @@ -111,6 +112,9 @@ public class RuneLite @Inject private OverlayManager overlayManager; + @Inject + private ScheduledExecutorService executorService; + @Inject private Provider itemManager; @@ -294,6 +298,7 @@ public class RuneLite { clientSessionManager.shutdown(); discordService.close(); + executorService.shutdown(); } @VisibleForTesting diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 64e54158ba..69afa967d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -36,6 +36,7 @@ import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.LayoutManager; import java.awt.Rectangle; +import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.image.BufferedImage; import javax.annotation.Nullable; @@ -267,6 +268,21 @@ public class ClientUI { saveClientBoundsConfig(); runelite.shutdown(); + + if (SystemTray.isSupported()) + { + SystemTray.getSystemTray().remove(trayIcon); + } + + if (client != null) + { + client.stop(); + } + + if (client instanceof Client) + { + ((Client)client).shutDown(); + } }, this::showWarningOnExit ); From 718dd363861a7839a99e500a3a3475e745b57993 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 30 Jul 2018 14:16:43 +0200 Subject: [PATCH 3/3] Stop plugins on shutdown Signed-off-by: Tomas Slusny --- .../main/java/net/runelite/client/RuneLite.java | 1 + .../runelite/client/plugins/PluginManager.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index d2a72afedb..229eec62c8 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -296,6 +296,7 @@ public class RuneLite public void shutdown() { + pluginManager.stopCorePlugins(); clientSessionManager.shutdown(); discordService.close(); executorService.shutdown(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index 5b0fc62e46..fd7cec8c81 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -214,6 +214,23 @@ public class PluginManager } } + public void stopCorePlugins() + { + List scannedPlugins = new ArrayList<>(plugins); + for (Plugin plugin : scannedPlugins) + { + try + { + stopPlugin(plugin); + plugins.remove(plugin); + } + catch (PluginInstantiationException ex) + { + log.warn("Unable to stop plugin {}. {}", plugin.getClass().getSimpleName(), ex); + } + } + } + List scanAndInstantiate(ClassLoader classLoader, String packageName) throws IOException { MutableGraph> graph = GraphBuilder