auto restart system

master
Alex 2021-12-27 23:29:34 +01:00
parent c6c55d512d
commit 7a75a4c205
1 changed files with 47 additions and 15 deletions

View File

@ -1,7 +1,9 @@
package net.krakatoa.proxy.listener;
import de.dytanic.cloudnet.driver.CloudNetDriver;
import de.dytanic.cloudnet.driver.service.ServiceConfiguration;
import de.dytanic.cloudnet.driver.service.ServiceInfoSnapshot;
import de.dytanic.cloudnet.driver.service.ServiceTask;
import de.dytanic.cloudnet.ext.bridge.BridgeServiceProperty;
import de.dytanic.cloudnet.ext.bridge.player.ICloudPlayer;
import de.dytanic.cloudnet.ext.bridge.player.IPlayerManager;
@ -66,31 +68,61 @@ public class SocketClientMessageListener implements KraSocketClientEventInterfac
case 33329: { // stop server - server auto restart
String serverName = kraProtocolMessage.getArgs().toLowerCase();
ServiceInfoSnapshot serviceInfoSnapshot = CloudNetDriver.getInstance()
.getCloudServiceProvider()
.getCloudServiceByName(serverName);
if (serverName.equals("lobby")) { // start new lobby
if (CloudNetDriver.getInstance().getServiceTaskProvider().isServiceTaskPresent("Lobby")) {
ServiceTask serviceTask = CloudNetDriver.getInstance().getServiceTaskProvider()
.getServiceTask("Lobby");
if (serviceInfoSnapshot != null) {
serviceInfoSnapshot.getProperty(BridgeServiceProperty.PLAYERS).ifPresent(players -> {
players.forEach(player -> {
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
.getPlayer(player.getUniqueId());
proxiedPlayer.sendMessage(
new TextComponent("§4AutoRestart §8» §cRestarting server..."));
if (serviceTask != null) {
ServiceInfoSnapshot serviceInfoSnapshot = ServiceConfiguration.builder(serviceTask)
.build().createNewService();
if (serviceInfoSnapshot != null) {
serviceInfoSnapshot.provider().start();
}
}
}
} else { // game server
ServiceInfoSnapshot serviceInfoSnapshot = CloudNetDriver.getInstance()
.getCloudServiceProvider()
.getCloudServiceByName(serverName);
if (serviceInfoSnapshot != null) {
serviceInfoSnapshot.getProperty(BridgeServiceProperty.PLAYERS).ifPresent(players -> {
players.forEach(player -> {
ProxiedPlayer proxiedPlayer = ProxySystem.getInstance().getProxy()
.getPlayer(player.getUniqueId());
proxiedPlayer.sendMessage(
new TextComponent("§4AutoRestart §8» §cRestarting server..."));
});
playersAutoRestartServerSystem.put(serverName, players);
});
playersAutoRestartServerSystem.put(serverName, players);
});
// stop target server
CloudNetDriver.getInstance().getCloudServiceProvider(serviceInfoSnapshot).stop();
}
// stop target server
CloudNetDriver.getInstance().getCloudServiceProvider(serviceInfoSnapshot).stop();
}
break;
}
case 59739: { // send players back to server - auto restart system
String serverName = kraProtocolMessage.getArgs().toLowerCase();
if (playersAutoRestartServerSystem.containsKey(serverName)) {
if (serverName.equals("lobby")) { // close old lobbies
Collection<ServiceInfoSnapshot> serviceInfoSnapshots = CloudNetDriver.getInstance()
.getCloudServiceProvider()
.getCloudServices("Lobby");
if (serviceInfoSnapshots != null) {
serviceInfoSnapshots.forEach(serviceInfoSnapshot -> {
if (!serverName.equals(serviceInfoSnapshot.getName())) {
serviceInfoSnapshot.provider().stop();
}
});
}
} else if (playersAutoRestartServerSystem.containsKey(serverName)) { // send players back
playersAutoRestartServerSystem.get(serverName).forEach(servicePlayer -> {
ICloudPlayer cloudPlayer = playerManager.getOnlinePlayer(servicePlayer.getUniqueId());