Skip to content

Commit

Permalink
Add a post-start event
Browse files Browse the repository at this point in the history
  • Loading branch information
ME1312 committed Jun 25, 2019
1 parent ecdc25b commit 30dd285
Show file tree
Hide file tree
Showing 18 changed files with 253 additions and 14 deletions.
@@ -0,0 +1,34 @@
package net.ME1312.SubServers.Bungee.Event;

import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

import java.util.UUID;

/**
* Server Started Event
*/
public class SubStartedEvent extends Event implements SubEvent {
private SubServer server;

/**
* Server Started Event<br>
* <b>This event can only be called when a SubData connection is made!</b>
*
* @param server Server Starting
*/
public SubStartedEvent(SubServer server) {
if (Util.isNull(server)) throw new NullPointerException();
this.server = server;
}

/**
* Gets the Server Effected
*
* @return The Server Effected
*/
public SubServer getServer() { return server; }
}
Expand Up @@ -195,7 +195,7 @@ public boolean update(UUID player, SubServer server, Version version, Callback<S

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

Expand All @@ -204,7 +204,7 @@ public boolean update(UUID player, SubServer server, Version version, Callback<S
if (!event.isCancelled()) {
logger.start();
host.queue(new PacketExCreateServer(server, version, logger.getExternalAddress(), data -> {
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("lock"), server, false));
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("updating"), server, false));
try {
if (data.getInt(0x0001) == 0) {
Logger.get(prefix).info("Saving...");
Expand Down
Expand Up @@ -79,6 +79,7 @@ public boolean start(UUID player) {
lock = false;
if (!event.isCancelled()) {
Logger.get("SubServers").info("Now starting " + getName());
started = false;
running = true;
logger.start();
host.queue(new PacketExEditServer(this, PacketExEditServer.UpdateType.START, logger.getExternalAddress().toString()));
Expand All @@ -105,12 +106,12 @@ public boolean stop(UUID player) {
} else return false;
}
private void stopped(Boolean allowrestart) {
SubStoppedEvent event = new SubStoppedEvent(this);
host.plugin.getPluginManager().callEvent(event);
Logger.get("SubServers").info(getName() + " has stopped");
logger.stop();
history.clear();
running = false;
SubStoppedEvent event = new SubStoppedEvent(this);
host.plugin.getPluginManager().callEvent(event);
Logger.get("SubServers").info(getName() + " has stopped");

if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.RECYCLE_SERVER || stopaction == StopAction.DELETE_SERVER) {
try {
Expand Down
Expand Up @@ -380,10 +380,10 @@ public boolean update(UUID player, SubServer server, Version version, Callback<S
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();

Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("lock"), server, true));
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("updating"), server, true));

CreatorTask task = new CreatorTask(player, server, version, x -> {
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("lock"), server, false));
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("updating"), server, false));
if (callback != null && x != null) try {
callback.run(x);
} catch (Throwable e) {
Expand Down
Expand Up @@ -119,6 +119,7 @@ public InternalSubServer(InternalHost host, String name, boolean enabled, int po

private void run() {
allowrestart = true;
started = false;
try {
ProcessBuilder pb = new ProcessBuilder().command(Executable.parse(host.getCreator().getBashDirectory(), executable)).directory(directory);
pb.environment().put("name", getName());
Expand All @@ -142,13 +143,14 @@ private void run() {
allowrestart = false;
}

SubStoppedEvent event = new SubStoppedEvent(this);
host.plugin.getPluginManager().callEvent(event);
Logger.get("SubServers").info(getName() + " has stopped");
process = null;
command = null;
history.clear();

SubStoppedEvent event = new SubStoppedEvent(this);
host.plugin.getPluginManager().callEvent(event);

if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.RECYCLE_SERVER || stopaction == StopAction.DELETE_SERVER) {
try {
if (stopaction == StopAction.RECYCLE_SERVER) {
Expand Down
Expand Up @@ -16,7 +16,8 @@
public abstract class SubServerContainer extends ServerContainer implements SubServer {
private List<NamedContainer<String, String>> incompatibilities = new ArrayList<NamedContainer<String, String>>();
private String template = null;
private boolean lock;
protected boolean started;
private boolean updating;

/**
* Creates a SubServer
Expand Down Expand Up @@ -59,7 +60,7 @@ public int permaEdit(ObjectMap<String> edit) {

@Override
public boolean isAvailable() {
return !lock && getHost().isAvailable();
return !updating && getHost().isAvailable();
}

@Override
Expand Down
Expand Up @@ -25,12 +25,18 @@ public SubServerController(Host host, String name, int port, String motd, boolea
control = new SubServerContainer(host, name, port, motd, hidden, restricted) {
@Override
public boolean start() {
return SubServerController.this.start();
if (SubServerController.this.start()) {
started = false;
return true;
} else return false;
}

@Override
public boolean start(UUID player) {
return SubServerController.this.start(player);
if (SubServerController.this.start(player)) {
started = false;
return true;
} else return false;
}

@Override
Expand Down
Expand Up @@ -3,15 +3,18 @@
import net.ME1312.SubData.Server.DataClient;
import net.ME1312.SubData.Server.Protocol.Initial.InitialPacket;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.SubStartedEvent;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.ServerContainer;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.Host.SubServerContainer;
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.ProxyServer;

import java.net.InetSocketAddress;
import java.util.HashMap;
Expand Down Expand Up @@ -106,6 +109,11 @@ private void link(SubDataClient client, Server server, int channel) throws Throw
Logger.get("SubServers").info("Sending shutdown signal to rogue SubServer: " + server.getName());
client.sendPacket(new PacketOutExReset("Rogue SubServer Detected"));
} else {
if (server instanceof SubServer && !Util.getDespiteException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("started"), server), true)) {
Util.isException(() -> Util.reflect(SubServerContainer.class.getDeclaredField("started"), server, true));
SubStartedEvent event = new SubStartedEvent((SubServer) server);
ProxyServer.getInstance().getPluginManager().callEvent(event);
}
client.sendPacket(new PacketLinkServer(server.getName(), 0, null));
}
setReady(client, true);
Expand Down
Expand Up @@ -114,6 +114,7 @@ public void event(SubCreateEvent event) {
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}

@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubSendCommandEvent event) {
if (!event.isCancelled()) {
Expand Down Expand Up @@ -147,6 +148,14 @@ public void event(SubStartEvent event) {
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubStartedEvent event) {
ObjectMap<String> args = new ObjectMap<String>();
args.set("server", event.getServer().getName());
broadcast(event.getServer(), new PacketOutExRunEvent(event.getClass(), args));

}

@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubStopEvent event) {
if (!event.isCancelled()) {
Expand All @@ -162,9 +171,10 @@ public void event(SubStopEvent event) {
public void event(SubStoppedEvent event) {
ObjectMap<String> args = new ObjectMap<String>();
args.set("server", event.getServer().getName());
broadcast(new PacketOutExRunEvent(event.getClass(), args));
broadcast(event.getServer(), new PacketOutExRunEvent(event.getClass(), args));

}

@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubRemoveServerEvent event) {
if (!event.isCancelled()) {
Expand Down
@@ -0,0 +1,40 @@
package net.ME1312.SubServers.Client.Bukkit.Event;

import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

/**
* Server Started Event
*/
public class SubStartedEvent extends Event implements SubEvent {
private String server;

/**
* Server Started Event<br>
* <b>This event can only be called when a SubData connection is made!</b>
*
* @param server Server that Started
*/
public SubStartedEvent(String server) {
if (Util.isNull(server)) throw new NullPointerException();
this.server = server;
}

/**
* Gets the Server Effected
*
* @return The Server Effected
*/
public String getServer() { return server; }

@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
private static HandlerList handlers = new HandlerList();
}
Expand Up @@ -89,6 +89,15 @@ public void run(ObjectMap<String> data) {
}
}
});
callback("SubStartedEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> data) {
if (plugin.isEnabled()) {
Bukkit.getPluginManager().callEvent(new SubStartedEvent(data.getString("server")));
callback("SubStartedEvent", this);
}
}
});
callback("SubStopEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> data) {
Expand Down
@@ -0,0 +1,43 @@
package net.ME1312.SubServers.Client.Sponge.Event;

import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Client.Sponge.Library.SubEvent;
import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.impl.AbstractEvent;

/**
* Server Started Event
*/
public class SubStartedEvent extends AbstractEvent implements SubEvent {
private String server;

/**
* Server Started Event<br>
* <b>This event can only be called when a SubData connection is made!</b>
*
* @param server Server that Started
*/
public SubStartedEvent(String server) {
if (Util.isNull(server)) throw new NullPointerException();
this.server = server;
}

/**
* Gets the Server Effected
*
* @return The Server Effected
*/
public String getServer() { return server; }

/**
* Gets the cause of this Event
*
* @deprecated Use simplified methods where available
* @return An empty cause list
*/
@Override
@Deprecated
public Cause getCause() {
return Cause.builder().build(getContext());
}
}
Expand Up @@ -75,6 +75,13 @@ public void run(ObjectMap<String> data) {
callback("SubStartEvent", this);
}
});
callback("SubStartedEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> data) {
Sponge.getEventManager().post(new SubStartedEvent(data.getString("server")));
callback("SubStartedEvent", this);
}
});
callback("SubStopEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> data) {
Expand Down
@@ -0,0 +1,31 @@
package net.ME1312.SubServers.Host.Event;

import net.ME1312.Galaxi.Library.Event.Event;
import net.ME1312.Galaxi.Library.Util;

/**
* Server Started Event
*/
public class SubStartedEvent extends Event {
private String server;

/**
* Server Started Event<br>
* <b>This event can only be called when a SubData connection is made!</b>
*
* @param server Server that Started
*/
public SubStartedEvent(String server) {
if (Util.isNull(server)) throw new NullPointerException();
this.server = server;
}

/**
* Gets the Server Effected
*
* @return The Server Effected
*/
public String getServer() {
return server;
}
}
Expand Up @@ -73,6 +73,13 @@ public void run(ObjectMap<String> data) {
callback("SubStartEvent", this);
}
});
callback("SubStartedEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> data) {
GalaxiEngine.getInstance().getPluginManager().executeEvent(new SubStartedEvent(data.getRawString("server")));
callback("SubStartedEvent", this);
}
});
callback("SubStopEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> data) {
Expand Down

0 comments on commit 30dd285

Please sign in to comment.