13
0

Adding shutdown callback, adapting startup

Dieser Commit ist enthalten in:
Lixfel 2019-12-16 09:04:59 +01:00
Ursprung d48e2af54a
Commit 37eba7a6f9
2 geänderte Dateien mit 18 neuen und 14 gelöschten Zeilen

Datei anzeigen

@ -41,6 +41,7 @@
</configuration>
</plugin>
</plugins>
<finalName>persistentbungeecore</finalName>
</build>
<dependencies>

Datei anzeigen

@ -9,7 +9,6 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@ -39,18 +38,24 @@ public class Subserver implements Runnable {
}
private final String serverName;
private Process p;
private PrintWriter writer;
private ServerInfo server;
private Servertype type;
private final Runnable shutdownCallback;
private final Process p;
private final PrintWriter writer;
private final ServerInfo server;
private final Servertype type;
private boolean started;
private final List<ProxiedPlayer> cachedPlayers = new ArrayList<>();
private final List<ProxiedPlayer> cachedPlayers = new LinkedList<>();
public Subserver(Servertype type, String serverName, int port, String... command){
this(type, serverName, port, () -> {}, command);
}
public Subserver(Servertype type, String serverName, int port, Runnable shutdownCallback, String... command){
this.started = false;
this.serverName = serverName;
this.type = type;
this.shutdownCallback = shutdownCallback;
ProcessBuilder pb = new ProcessBuilder(command);
InetSocketAddress address = new InetSocketAddress("127.0.0.1", port);
@ -58,8 +63,7 @@ public class Subserver implements Runnable {
try{
this.p = pb.start();
}catch(IOException e){
logger.log(Level.SEVERE, "Server could not be started", e);
return;
throw new SecurityException("Server could not be started", e);
}
this.server = ProxyServer.getInstance().constructServerInfo(
@ -108,13 +112,11 @@ public class Subserver implements Runnable {
}
private void fatalError(){
for(ProxiedPlayer cached : cachedPlayers){
for(ProxiedPlayer cached : cachedPlayers)
cached.sendMessage(Persistent.getPrefix() + "§cUnerwarteter Fehler beim Serverstart.");
}
for(ProxiedPlayer player : server.getPlayers()){
for(ProxiedPlayer player : server.getPlayers())
player.sendMessage(Persistent.getPrefix() + "§cUnerwarteter Fehler im Server.");
}
}
public void run(){
ProxyServer.getInstance().getServers().put(serverName, server);
@ -123,7 +125,7 @@ public class Subserver implements Runnable {
try(BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()))){
String line = "";
while (!started && (line = reader.readLine()) != null) {
started = line.contains("Done ("); //Problematisch
started = line.contains("ViaVersion detected server version");
}
if(line == null){
@ -132,7 +134,7 @@ public class Subserver implements Runnable {
return;
}
Thread.sleep(800);
Thread.sleep(300);
for(ProxiedPlayer cachedPlayer : cachedPlayers){
Thread.sleep(200);
@ -151,6 +153,7 @@ public class Subserver implements Runnable {
} finally {
serverList.remove(this);
ProxyServer.getInstance().getServers().remove(serverName);
shutdownCallback.run();
}
}
}