From ff82fd5151610ccc80e13c0d444cc45729ba98bd Mon Sep 17 00:00:00 2001 From: ME1312 Date: Thu, 8 Apr 2021 09:15:35 -0400 Subject: [PATCH] Minor API efficiency improvements --- SubServers.Bungee/common/pom.xml | 4 ++-- SubServers.Bungee/pom.xml | 4 ++-- .../ME1312/SubServers/Bungee/Host/Executable.java | 13 +++++++++++-- .../Bungee/Host/External/ExternalHost.java | 10 +++++----- .../net/ME1312/SubServers/Bungee/Host/Proxy.java | 10 +++++----- .../ME1312/SubServers/Bungee/Host/ServerImpl.java | 10 +++++----- SubServers.Client/Bukkit/pom.xml | 2 +- .../net/ME1312/SubServers/Client/Bukkit/SubAPI.java | 10 +++++----- .../ME1312/SubServers/Client/Bukkit/SubPlugin.java | 1 - SubServers.Client/Common/pom.xml | 2 +- .../SubServers/Client/Common/Network/API/Host.java | 10 +++++----- .../SubServers/Client/Common/Network/API/Proxy.java | 10 +++++----- .../Client/Common/Network/API/Server.java | 10 +++++----- SubServers.Client/Sponge/pom.xml | 2 +- .../net/ME1312/SubServers/Client/Sponge/SubAPI.java | 10 +++++----- .../ME1312/SubServers/Client/Sponge/SubPlugin.java | 1 - SubServers.Host/pom.xml | 4 ++-- .../SubServers/Host/Executable/Executable.java | 13 +++++++++++-- .../src/net/ME1312/SubServers/Host/SubAPI.java | 10 +++++----- SubServers.Sync/pom.xml | 4 ++-- .../ME1312/SubServers/Sync/Server/ServerImpl.java | 10 +++++----- 21 files changed, 83 insertions(+), 67 deletions(-) diff --git a/SubServers.Bungee/common/pom.xml b/SubServers.Bungee/common/pom.xml index fe55c80b..d73e371e 100644 --- a/SubServers.Bungee/common/pom.xml +++ b/SubServers.Bungee/common/pom.xml @@ -28,13 +28,13 @@ net.ME1312.Galaxi GalaxiUtil - 21w15a + 21w15b provided net.ME1312.Galaxi GalaxiEngine - 21w15a + 21w15b provided diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml index a666b21f..6c575f95 100644 --- a/SubServers.Bungee/pom.xml +++ b/SubServers.Bungee/pom.xml @@ -28,14 +28,14 @@ net.ME1312.Galaxi GalaxiUtil - 21w15a + 21w15b compile true net.ME1312.Galaxi GalaxiEngine - 21w15a + 21w15b provided diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java index c8c7fb14..da9e046c 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java @@ -12,6 +12,7 @@ import java.io.IOException; */ public class Executable { private Executable() {} + private static final boolean USE_SESSION_TRACKING; /** * Format a command to be executed @@ -30,7 +31,7 @@ public class Executable { exec = '"' + gitbash + ((gitbash.endsWith(File.separator))?"":File.separator) + "bin" + File.separatorChar + "sh.exe\" -lc \"" + exec.replace("\\", "/\\").replace("\"", "\\\"").replace("^", "^^").replace("%", "^%").replace("&", "^&").replace("<", "^<").replace(">", "^>").replace("|", "^|") + '"'; cmd = new String[]{"cmd.exe", "/q", "/c", '"'+exec+'"'}; - } else if (Platform.getSystem() == Platform.LINUX) { + } else if (USE_SESSION_TRACKING) { cmd = new String[]{"setsid", "-w", "sh", "-lc", exec}; } else { cmd = new String[]{"sh", "-lc", exec}; @@ -38,6 +39,14 @@ public class Executable { return cmd; } + static { + USE_SESSION_TRACKING = Platform.getSystem() != Platform.WINDOWS && Util.getDespiteException(() -> { + Process test = Runtime.getRuntime().exec(new String[]{"setsid", "-w", "bash", "-c", "exit 0"}); + test.waitFor(); // The purpose of this block is to test for the 'setsid' command + return test.exitValue() == 0; + }, false); + } + /** * Get the PID of a currently running process * @@ -88,7 +97,7 @@ public class Executable { if (pid != null) try { if (Platform.getSystem() == Platform.WINDOWS) { Runtime.getRuntime().exec(new String[]{"taskkill.exe", "/T", "/F", "/PID", pid.toString()}).waitFor(); - } else if (Platform.getSystem() == Platform.LINUX) { + } else if (USE_SESSION_TRACKING) { Runtime.getRuntime().exec(new String[]{"bash", "-c", "kill -9 $(ps -o pid= --sid $(ps -o sid= --pid " + pid + "))"}).waitFor(); } } catch (IOException | InterruptedException e) {} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java index 7fb179a7..ee2cccf1 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalHost.java @@ -70,11 +70,11 @@ public class ExternalHost extends Host implements ClientHandler { @Override public DataClient[] getSubData() { - LinkedList keys = new LinkedList(subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add(subdata.get(channel)); - return channels.toArray(new DataClient[0]); + Integer[] keys = subdata.keySet().toArray(new Integer[0]); + DataClient[] channels = new DataClient[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = subdata.get(keys[i]); + return channels; } public void setSubData(DataClient client, int channel) { diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java index b3f47455..0abf82ca 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java @@ -44,11 +44,11 @@ public class Proxy implements ClientHandler, ExtraDataHandler { @Override public DataClient[] getSubData() { - LinkedList keys = new LinkedList(subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add(subdata.get(channel)); - return channels.toArray(new DataClient[0]); + Integer[] keys = subdata.keySet().toArray(new Integer[0]); + DataClient[] channels = new DataClient[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = subdata.get(keys[i]); + return channels; } @SuppressWarnings("deprecation") diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerImpl.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerImpl.java index e63ed94b..0ac46310 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerImpl.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/ServerImpl.java @@ -82,11 +82,11 @@ public class ServerImpl extends BungeeServerInfo implements Server { @Override public DataClient[] getSubData() { - LinkedList keys = new LinkedList(subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add(subdata.get(channel)); - return channels.toArray(new DataClient[0]); + Integer[] keys = subdata.keySet().toArray(new Integer[0]); + DataClient[] channels = new DataClient[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = subdata.get(keys[i]); + return channels; } public void setSubData(DataClient client, int channel) { diff --git a/SubServers.Client/Bukkit/pom.xml b/SubServers.Client/Bukkit/pom.xml index d04e4a96..4bf1c31a 100644 --- a/SubServers.Client/Bukkit/pom.xml +++ b/SubServers.Client/Bukkit/pom.xml @@ -46,7 +46,7 @@ net.ME1312.Galaxi GalaxiUtil - 21w15a + 21w15b compile true diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java index 130dc9d0..b6dff8a1 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubAPI.java @@ -71,11 +71,11 @@ public final class SubAPI extends ClientAPI { * @return SubData Network Connections */ public DataClient[] getSubDataNetwork() { - LinkedList keys = new LinkedList(plugin.subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add(plugin.subdata.get(channel)); - return channels.toArray(new DataClient[0]); + Integer[] keys = plugin.subdata.keySet().toArray(new Integer[0]); + DataClient[] channels = new DataClient[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = plugin.subdata.get(keys[i]); + return channels; } /** diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java index 9b4c02d5..f541ad0f 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubPlugin.java @@ -87,7 +87,6 @@ public final class SubPlugin extends JavaPlugin { getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); reload(false); - subdata.put(0, null); subprotocol = SubProtocol.get(); subprotocol.registerCipher("DHE", DHE.get(128)); subprotocol.registerCipher("DHE-128", DHE.get(128)); diff --git a/SubServers.Client/Common/pom.xml b/SubServers.Client/Common/pom.xml index 5130e649..4d0311ba 100644 --- a/SubServers.Client/Common/pom.xml +++ b/SubServers.Client/Common/pom.xml @@ -18,7 +18,7 @@ net.ME1312.Galaxi GalaxiUtil - 21w15a + 21w15b provided diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Host.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Host.java index 5d624cab..b3c0f529 100644 --- a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Host.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Host.java @@ -88,11 +88,11 @@ public class Host { public DataSender[] getSubData() { if (raw.contains("subdata")) { ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); - LinkedList keys = new LinkedList(subdata.getKeys()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel))); - return channels.toArray(new SubDataSender[0]); + Integer[] keys = subdata.getKeys().toArray(new Integer[0]); + DataSender[] channels = new DataSender[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = (subdata.isNull(keys[i]))? null : new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(keys[i])); + return channels; } else { return new SubDataSender[0]; } diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Proxy.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Proxy.java index a1bcc744..3015d079 100644 --- a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Proxy.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Proxy.java @@ -78,11 +78,11 @@ public class Proxy { @SuppressWarnings("unchecked") public DataSender[] getSubData() { ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); - LinkedList keys = new LinkedList(subdata.getKeys()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel))); - return channels.toArray(new SubDataSender[0]); + Integer[] keys = subdata.getKeys().toArray(new Integer[0]); + DataSender[] channels = new DataSender[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = (subdata.isNull(keys[i]))? null : new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(keys[i])); + return channels; } /** diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Server.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Server.java index bcd60db6..d18fcaf3 100644 --- a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Server.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/Server.java @@ -78,11 +78,11 @@ public class Server { @SuppressWarnings("unchecked") public DataSender[] getSubData() { ObjectMap subdata = new ObjectMap((Map) raw.getObject("subdata")); - LinkedList keys = new LinkedList(subdata.getKeys()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel))); - return channels.toArray(new SubDataSender[0]); + Integer[] keys = subdata.getKeys().toArray(new Integer[0]); + DataSender[] channels = new DataSender[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = (subdata.isNull(keys[i]))? null : new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(keys[i])); + return channels; } /** diff --git a/SubServers.Client/Sponge/pom.xml b/SubServers.Client/Sponge/pom.xml index 626a928d..4849a85c 100644 --- a/SubServers.Client/Sponge/pom.xml +++ b/SubServers.Client/Sponge/pom.xml @@ -28,7 +28,7 @@ net.ME1312.Galaxi GalaxiUtil - 21w15a + 21w15b compile true diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubAPI.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubAPI.java index b8515290..d67f953c 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubAPI.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubAPI.java @@ -73,11 +73,11 @@ public final class SubAPI extends ClientAPI { * @return SubData Network Connections */ public DataClient[] getSubDataNetwork() { - LinkedList keys = new LinkedList(plugin.subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add(plugin.subdata.get(channel)); - return channels.toArray(new DataClient[0]); + Integer[] keys = plugin.subdata.keySet().toArray(new Integer[0]); + DataClient[] channels = new DataClient[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = plugin.subdata.get(keys[i]); + return channels; } /** diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java index 54e71855..b1f74f45 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java @@ -106,7 +106,6 @@ public final class SubPlugin { running = true; reload(false); - subdata.put(0, null); subprotocol = SubProtocol.get(); subprotocol.registerCipher("DHE", DHE.get(128)); subprotocol.registerCipher("DHE-128", DHE.get(128)); diff --git a/SubServers.Host/pom.xml b/SubServers.Host/pom.xml index 67aa94a8..1cba1be8 100644 --- a/SubServers.Host/pom.xml +++ b/SubServers.Host/pom.xml @@ -31,14 +31,14 @@ net.ME1312.Galaxi GalaxiEngine - 21w15a + 21w15b compile true net.ME1312.Galaxi GalaxiUI - 21w15a + 21w15b runtime true diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java index 4fc882ca..f8ac19c6 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java @@ -12,6 +12,7 @@ import java.io.IOException; */ public class Executable { private Executable() {} + private static final boolean USE_SESSION_TRACKING; /** * Format a command to be executed @@ -30,7 +31,7 @@ public class Executable { exec = '"' + gitbash + ((gitbash.endsWith(File.separator))?"":File.separator) + "bin" + File.separatorChar + "sh.exe\" -lc \"" + exec.replace("\\", "/\\").replace("\"", "\\\"").replace("^", "^^").replace("%", "^%").replace("&", "^&").replace("<", "^<").replace(">", "^>").replace("|", "^|") + '"'; cmd = new String[]{"cmd.exe", "/q", "/c", '"'+exec+'"'}; - } else if (Platform.getSystem() == Platform.LINUX) { + } else if (USE_SESSION_TRACKING) { cmd = new String[]{"setsid", "-w", "sh", "-lc", exec}; } else { cmd = new String[]{"sh", "-lc", exec}; @@ -38,6 +39,14 @@ public class Executable { return cmd; } + static { + USE_SESSION_TRACKING = Platform.getSystem() != Platform.WINDOWS && Util.getDespiteException(() -> { + Process test = Runtime.getRuntime().exec(new String[]{"setsid", "-w", "bash", "-c", "exit 0"}); + test.waitFor(); // The purpose of this block is to test for the 'setsid' command + return test.exitValue() == 0; + }, false); + } + /** * Get the PID of a currently running process * @@ -88,7 +97,7 @@ public class Executable { if (pid != null) try { if (Platform.getSystem() == Platform.WINDOWS) { Runtime.getRuntime().exec(new String[]{"taskkill.exe", "/T", "/F", "/PID", pid.toString()}).waitFor(); - } else if (Platform.getSystem() == Platform.LINUX) { + } else if (USE_SESSION_TRACKING) { Runtime.getRuntime().exec(new String[]{"bash", "-c", "kill -9 $(ps -o pid= --sid $(ps -o sid= --pid " + pid + "))"}).waitFor(); } } catch (IOException | InterruptedException e) {} diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/SubAPI.java b/SubServers.Host/src/net/ME1312/SubServers/Host/SubAPI.java index b133f5cb..3ae0d7a3 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/SubAPI.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/SubAPI.java @@ -57,11 +57,11 @@ public final class SubAPI extends ClientAPI { * @return SubData Network Connections */ public DataClient[] getSubDataNetwork() { - LinkedList keys = new LinkedList(host.subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add(host.subdata.get(channel)); - return channels.toArray(new DataClient[0]); + Integer[] keys = host.subdata.keySet().toArray(new Integer[0]); + DataClient[] channels = new DataClient[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = host.subdata.get(keys[i]); + return channels; } /** diff --git a/SubServers.Sync/pom.xml b/SubServers.Sync/pom.xml index a9312641..4cd56702 100644 --- a/SubServers.Sync/pom.xml +++ b/SubServers.Sync/pom.xml @@ -28,14 +28,14 @@ net.ME1312.Galaxi GalaxiUtil - 21w15a + 21w15b compile true net.ME1312.Galaxi GalaxiEngine - 21w15a + 21w15b provided diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java index 5f2e0230..c051f0e3 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/ServerImpl.java @@ -67,11 +67,11 @@ public class ServerImpl extends BungeeServerInfo { * @return SubData Client Channel ID Array */ public DataSender[] getSubData() { - LinkedList keys = new LinkedList(subdata.keySet()); - LinkedList channels = new LinkedList(); - Collections.sort(keys); - for (Integer channel : keys) channels.add((subdata.getOrDefault(channel, null) == null)?null:new ForwardedDataSender((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0], subdata.get(channel))); - return channels.toArray(new SubDataSender[0]); + Integer[] keys = subdata.keySet().toArray(new Integer[0]); + DataSender[] channels = new DataSender[keys.length]; + Arrays.sort(keys); + for (int i = 0; i < keys.length; ++i) channels[i] = (subdata.getOrDefault(keys[i], null) == null)? null : new ForwardedDataSender((SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0], subdata.get(keys[i])); + return channels; } /**