diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java index 746aeab5..72c2fc26 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java @@ -176,6 +176,7 @@ public class ExternalSubCreator extends SubCreator { ObjectMap server = new ObjectMap(); ObjectMap config = new ObjectMap((Map) data.getObject(0x0002)); + if (config.contains("Directory") && (update != null || !template.getConfigOptions().contains("Directory"))) config.remove("Directory"); if (update == null) { server.set("Enabled", true); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java index aa317431..1a600a20 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubCreator.java @@ -278,6 +278,7 @@ public class InternalSubCreator extends SubCreator { host.plugin.exServers.remove(name.toLowerCase()); config = new ObjectMap((Map) replacements.replace(config.get())); + if (config.contains("Directory") && (update != null || !template.getConfigOptions().contains("Directory"))) config.remove("Directory"); if (update == null) { server.set("Enabled", true); 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 accc6b93..92378600 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 @@ -87,13 +87,13 @@ public class PacketLinkServer implements InitialPacket, PacketObjectIn, address = new InetSocketAddress(sa[0], Integer.parseInt(sa[1])); } - Map servers = plugin.api.getServers(); Server server; + Map servers = plugin.api.getServers(); if (name != null && servers.keySet().contains(name.toLowerCase())) { - link(client, name, address, servers.get(name.toLowerCase()), channel); + link(client, servers.get(name.toLowerCase()), channel); } else if (address != null) { - if ((server = search(address)) != null || !strict) { - link(client, name, address, server, channel); + if ((server = search(address)) != null || (server = create(name, address)) != null) { + link(client, server, channel); } else { throw new ServerLinkException("There is no server with address: " + address.getAddress().getHostAddress() + ':' + address.getPort()); } @@ -112,18 +112,31 @@ public class PacketLinkServer implements InitialPacket, PacketObjectIn, } } + private Server create(String name, InetSocketAddress address) throws Throwable { + if (strict) { + return null; + } else { + String id = (name == null)? Util.getNew(SubAPI.getInstance().getServers().keySet(), () -> UUID.randomUUID().toString()) : name; + Server server = SubAPI.getInstance().addServer(id, address.getAddress(), address.getPort(), "Some Dynamic Server", name == null, false); + if (server != null) Util.reflect(ServerImpl.class.getDeclaredField("persistent"), server, false); + return server; + } + } + + private Server search(InetSocketAddress address) { + Server server = null; + for (Server s : plugin.api.getServers().values()) { + if (s.getAddress().equals(address)) { + if (server != null) throw new ServerLinkException("Multiple servers match address: " + address.getAddress().getHostAddress() + ':' + address.getPort()); + server = s; + } + } + return server; + } + static long req = 1; static long last = Calendar.getInstance().getTime().getTime(); - private void link(SubDataClient client, String name, InetSocketAddress address, Server resolved, int channel) throws Throwable { - final Server server; - if (resolved == null) { - String id = (name == null)? Util.getNew(SubAPI.getInstance().getServers().keySet(), () -> UUID.randomUUID().toString()) : name; - server = SubAPI.getInstance().addServer(id, address.getAddress(), address.getPort(), "Some Dynamic Server", name == null, false); - Util.reflect(ServerImpl.class.getDeclaredField("persistent"), server, false); - } else { - server = resolved; - } - + private void link(SubDataClient client, Server server, int channel) throws Throwable { HashMap subdata = Util.getDespiteException(() -> Util.reflect(ServerImpl.class.getDeclaredField("subdata"), server), null); if (!subdata.keySet().contains(channel) || (channel == 0 && subdata.get(0) == null)) { server.setSubData(client, channel); @@ -166,17 +179,6 @@ public class PacketLinkServer implements InitialPacket, PacketObjectIn, } } - private Server search(InetSocketAddress address) throws ServerLinkException { - Server server = null; - for (Server s : plugin.api.getServers().values()) { - if (s.getAddress().equals(address)) { - if (server != null) throw new ServerLinkException("Multiple servers match address: " + address.getAddress().getHostAddress() + ':' + address.getPort()); - server = s; - } - } - return server; - } - @Override public int version() { return 0x0001; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLoggerImpl.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLoggerImpl.java index 9b6267f6..2dded0b4 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLoggerImpl.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLoggerImpl.java @@ -9,8 +9,10 @@ import net.ME1312.Galaxi.Log.LogStream; import net.ME1312.Galaxi.Log.Logger; import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubData.Client.DataClient; +import net.ME1312.SubData.Client.DataSender; import net.ME1312.SubData.Client.Library.DisconnectReason; import net.ME1312.SubData.Client.SubDataClient; +import net.ME1312.SubData.Client.SubDataSender; import net.ME1312.SubServers.Host.ExHost; import net.ME1312.SubServers.Host.Library.TextColor; import net.ME1312.SubServers.Host.Network.Packet.PacketOutExLogMessage; @@ -69,10 +71,7 @@ public class SubLoggerImpl { // Log to NETWORK if (logn) { if (this.address != null && channel != null && !channel.isClosed()) { - if (ccache != null) { - for (Pair val : ccache) channel.sendPacket(new PacketOutExLogMessage(this.address, val.key(), val.value())); - ccache = null; - } + flushCache(channel); channel.sendPacket(new PacketOutExLogMessage(this.address, stream.getLevel().getID(), message)); } else { if (ccache == null) ccache = new LinkedList>(); @@ -85,9 +84,18 @@ public class SubLoggerImpl { }); } + private void flushCache(DataSender sender) { + if (ccache != null) { + SubDataSender channel = (SubDataSender) sender; + for (Pair val : ccache) channel.sendPacket(new PacketOutExLogMessage(this.address, val.key(), val.value())); + ccache = null; + } + } + @SuppressWarnings("deprecation") void init() { if (logn) Util.isException(() -> { + Process process = this.process; ExHost host = SubAPI.getInstance().getInternals(); channel = (SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0].newChannel(); channel.on.closed(new Callback>() { @@ -107,6 +115,7 @@ public class SubLoggerImpl { timer.cancel(); } else try { SubDataClient open = (SubDataClient) SubAPI.getInstance().getSubDataNetwork()[0].newChannel(); + open.on.ready(SubLoggerImpl.this::flushCache); open.on.closed(run); channel = open; timer.cancel();