Skip to content

Commit

Permalink
Add the Update command
Browse files Browse the repository at this point in the history
And several related UI changes to SubServers.Client
  • Loading branch information
ME1312 committed Jun 17, 2019
1 parent 96a0624 commit be8f87d
Show file tree
Hide file tree
Showing 78 changed files with 3,611 additions and 762 deletions.
4 changes: 2 additions & 2 deletions SubServers.Bungee/pom.xml
Expand Up @@ -30,13 +30,13 @@
<dependency>
<groupId>net.ME1312.Galaxi</groupId>
<artifactId>GalaxiUtil</artifactId>
<version>19w22b</version>
<version>19w24a</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.ME1312.Galaxi</groupId>
<artifactId>GalaxiEngine</artifactId>
<version>19w22b</version>
<version>19w24a</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down
Expand Up @@ -2,6 +2,7 @@

import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
Expand All @@ -16,6 +17,7 @@
public class SubCreateEvent extends Event implements SubEvent, Cancellable {
private boolean cancelled = false;
private UUID player;
private SubServer update;
private Host host;
private String name;
private SubCreator.ServerTemplate template;
Expand All @@ -42,6 +44,17 @@ public SubCreateEvent(UUID player, Host host, String name, SubCreator.ServerTemp
this.port = port;
}

public SubCreateEvent(UUID player, SubServer server, Version version) {
if (Util.isNull(server)) throw new NullPointerException();
this.player = player;
this.update = server;
this.name = server.getName();
this.host = server.getHost();
this.template = server.getTemplate();
this.version = version;
this.port = server.getAddress().getPort();
}

/**
* Get the Host the SubServer will run on
*
Expand All @@ -51,6 +64,24 @@ public Host getHost() {
return host;
}

/**
* Get if SubCreator is being run in update mode
*
* @return Update Mode Status
*/
public boolean isUpdate() {
return update != null;
}

/**
* Get the Server that's being updated
*
* @return Updating Server
*/
public SubServer getUpdating() {
return update;
}

/**
* Get the name the SubServer will use
*
Expand Down
Expand Up @@ -9,6 +9,7 @@
import net.ME1312.Galaxi.Library.Config.YAMLConfig;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExConfigureHost;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExCreateServer;
import net.ME1312.SubServers.Bungee.SubAPI;
Expand Down Expand Up @@ -85,7 +86,8 @@ public boolean create(UUID player, String name, ServerTemplate template, Version
return new InetSocketAddress(host.getAddress(), i.get());
}).getPort();
}
ExternalSubLogger logger = new ExternalSubLogger(this, name + File.separator + "Creator", log, null);
String prefix = name + File.separator + "Creator";
ExternalSubLogger logger = new ExternalSubLogger(this, prefix, log, null);
thread.put(name.toLowerCase(), new NamedContainer<>(port, logger));

final int fport = port;
Expand All @@ -96,7 +98,7 @@ public boolean create(UUID player, String name, ServerTemplate template, Version
host.queue(new PacketExCreateServer(name, template, version, port, logger.getExternalAddress(), data -> {
try {
if (data.getInt(0x0001) == 0) {
System.out.println(name + "/Creator > Saving...");
Logger.get(prefix).info("Saving...");
if (host.plugin.exServers.keySet().contains(name.toLowerCase()))
host.plugin.exServers.remove(name.toLowerCase());

Expand All @@ -110,6 +112,7 @@ public boolean create(UUID player, String name, ServerTemplate template, Version
server.set("Enabled", true);
server.set("Display", "");
server.set("Host", host.getName());
server.set("Template", template.getName());
server.set("Group", new ArrayList<String>());
server.set("Port", fport);
server.set("Motd", "Some SubServer");
Expand All @@ -127,6 +130,7 @@ public boolean create(UUID player, String name, ServerTemplate template, Version
SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), fport, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"),
server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted"));
if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display"));
subserver.setTemplate(getTemplate(server.getRawString("Template")));
for (String group : server.getStringList("Group")) subserver.addGroup(group);
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) subserver.setStopAction(action);
Expand All @@ -145,7 +149,7 @@ public boolean create(UUID player, String name, ServerTemplate template, Version
ew.printStackTrace();
}
} else {
System.out.println(name + "/Creator > " + data.getString(0x0003));
Logger.get(prefix).info(data.getString(0x0003));
}
} catch (Exception e) {
e.printStackTrace();
Expand Down Expand Up @@ -183,6 +187,51 @@ public boolean create(UUID player, String name, ServerTemplate template, Version
return string;
}

@Override
public boolean update(UUID player, SubServer server, Version version, Callback<SubServer> callback) {
if (Util.isNull(server)) throw new NullPointerException();
if (host.isAvailable() && host.isEnabled() && host == server.getHost() && server.isAvailable() && !server.isRunning() && server.getTemplate() != null && server.getTemplate().isEnabled() && server.getTemplate().canUpdate() && (version != null || !server.getTemplate().requiresVersion())) {
StackTraceElement[] origin = new Exception().getStackTrace();

String name = server.getName();
String prefix = name + File.separator + "Updater";
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("lock"), server, true));
ExternalSubLogger logger = new ExternalSubLogger(this, prefix, log, null);
thread.put(name.toLowerCase(), new NamedContainer<>(server.getAddress().getPort(), logger));

final SubCreateEvent event = new SubCreateEvent(player, server, version);
host.plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
logger.start();
host.queue(new PacketExCreateServer(server, version, logger.getExternalAddress(), data -> {
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("lock"), server, false));
try {
if (data.getInt(0x0001) == 0) {
Logger.get(prefix).info("Saving...");
if (callback != null) try {
callback.run(server);
} catch (Throwable e) {
Throwable ew = new InvocationTargetException(e);
ew.setStackTrace(origin);
ew.printStackTrace();
}
} else {
Logger.get(prefix).info(data.getString(0x0003));
}
} catch (Exception e) {
e.printStackTrace();
}
logger.stop();
this.thread.remove(name.toLowerCase());
}));
return true;
} else {
thread.remove(name.toLowerCase());
return false;
}
} else return false;
}

@Override
public void terminate() {
HashMap<String, NamedContainer<Integer, ExternalSubLogger>> thread = new HashMap<String, NamedContainer<Integer, ExternalSubLogger>>();
Expand Down

0 comments on commit be8f87d

Please sign in to comment.