diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java index b5ab0ec6..ef59f4ee 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketLinkServer.java @@ -68,10 +68,14 @@ public void execute(Client client, YAMLSection data) { Server server; if (data.contains("name") && servers.keySet().contains(data.getRawString("name").toLowerCase())) { link(client, servers.get(data.getRawString("name").toLowerCase())); - } else if ((server = search(new InetSocketAddress(client.getAddress().getAddress(), data.getInt("port")))) != null) { - link(client, server); + } else if (data.contains("port")) { + if ((server = search(new InetSocketAddress(client.getAddress().getAddress(), data.getInt("port")))) != null) { + link(client, server); + } else { + throw new ServerLinkException("There is no server with address: " + client.getAddress().getAddress().getHostAddress() + ':' + data.getInt("port")); + } } else { - throw new ServerLinkException("There is no server with address: " + client.getAddress().getAddress().getHostAddress() + ':' + data.getInt("port")); + throw new ServerLinkException("Not enough arguments"); } } catch (ServerLinkException e) { if (data.contains("name")) { @@ -89,8 +93,12 @@ private void link(Client client, Server server) { if (server.getSubData() == null) { client.setHandler(server); System.out.println("SubData > " + client.getAddress().toString() + " has been defined as " + ((server instanceof SubServer) ? "SubServer" : "Server") + ": " + server.getName()); - client.sendPacket(new PacketLinkServer(server.getName(), 0, "Definition Successful")); - if (server instanceof SubServer && !((SubServer) server).isRunning()) client.sendPacket(new PacketOutReset("Rogue SubServer Detected")); + if (server instanceof SubServer && !((SubServer) server).isRunning()) { + System.out.println("SubServers > Sending shutdown signal to rogue SubServer: " + server.getName()); + client.sendPacket(new PacketOutReset("Rogue SubServer Detected")); + } else { + client.sendPacket(new PacketLinkServer(server.getName(), 0, "Definition Successful")); + } } else { client.sendPacket(new PacketLinkServer(null, 3, "Server already linked")); } diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java index 78ca5d0d..dd38c374 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubPlugin.java @@ -493,8 +493,6 @@ public void reload() throws IOException { SubServer oserver = api.getSubServer(oname); if (oserver != null && server.isCompatible(oserver)) server.toggleCompatibility(oserver); } - if (autorun.contains(name)) - server.start(); } ukeys.clear(); api.ready = true; @@ -520,6 +518,37 @@ public void reload() throws IOException { } System.out.println("SubServers > " + ((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + ((proxies > 1)?proxies+" Proxies, ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s"); + + long scd = TimeUnit.SECONDS.toMillis(config.get().getSection("Settings").getLong("Run-On-Launch-Cooldown", 0L)); + for (Host host : api.getHosts().values()) { + new Thread(() -> { + try { + while (running && begin == resetDate && !host.isAvailable()) { + Thread.sleep(250); + } + List ar = new LinkedList(); + ar.addAll(autorun); + long init = Calendar.getInstance().getTime().getTime(); + while (running && begin == resetDate && ar.size() > 0) { + SubServer server = host.getSubServer(ar.get(0)); + ar.remove(0); + if (server != null && !server.isRunning()) { + server.start(); + if (ar.size() > 0 && scd > 0) { + long sleep = Calendar.getInstance().getTime().getTime(); + while (running && begin == resetDate && server.getSubData() == null && Calendar.getInstance().getTime().getTime() - sleep < scd) { + Thread.sleep(250); + } + } + } + } + if (running && begin == resetDate && Calendar.getInstance().getTime().getTime() - init >= 5000) + System.out.println("SubServers > The auto-start queue for " + host.getName() + " has been finished"); + } catch (Exception e) { + e.printStackTrace(); + } + }, "SubServers.Bungee::Automatic_Server_Starter(" + host.getName() + ")").start(); + } } private void post() { diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInReset.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInReset.java index 486c30c6..f0c44736 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInReset.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/Packet/PacketInReset.java @@ -12,8 +12,8 @@ public class PacketInReset implements PacketIn { @Override public void execute(YAMLSection data) { - if (data != null && data.contains("m")) Bukkit.getLogger().warning("SubData > Received request for a server shutdown: " + data.getString("m")); - else Bukkit.getLogger().warning("SubData > Received request for a server shutdown"); + if (data != null && data.contains("m")) Bukkit.getLogger().warning("SubData > Received shutdown signal: " + data.getString("m")); + else Bukkit.getLogger().warning("SubData > Received shutdown signal"); Bukkit.shutdown(); } diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInReset.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInReset.java index 67f10638..c75cd8bf 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInReset.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/Packet/PacketInReset.java @@ -25,8 +25,8 @@ public PacketInReset() { @Override public void execute(YAMLSection data) { - if (data != null && data.contains("m")) log.warn("Received request for a server shutdown: " + data.getString("m")); - else log.warn("Received request for a server shutdown"); + if (data != null && data.contains("m")) log.warn("Received shutdown signal: " + data.getString("m")); + else log.warn("Received shutdown signal"); Sponge.getServer().shutdown(); }