Обновление модуля: SingleServer
Переход на использование внешних модулей, реализующих интерфейс MinecraftServer и предоставляющих сервис MinecraftServerFactory.
This commit is contained in:
@@ -20,14 +20,14 @@
|
||||
|
||||
<groupId>asys</groupId>
|
||||
<artifactId>singleserver</artifactId>
|
||||
<version>0.2</version>
|
||||
<version>0.3</version>
|
||||
<packaging>bundle</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>asys</groupId>
|
||||
<artifactId>api</artifactId>
|
||||
<version>0.5</version>
|
||||
<version>0.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.osgi</groupId>
|
||||
|
||||
@@ -6,6 +6,8 @@ package asys.singleserver;
|
||||
|
||||
import asys.api.ASysUtils;
|
||||
import asys.api.BankObject;
|
||||
import asys.api.MinecraftServerFactory;
|
||||
import asys.api.ServerManager;
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceRegistration;
|
||||
@@ -17,21 +19,28 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Properties;
|
||||
|
||||
import static asys.api.ASysUtils.GetProperty;
|
||||
|
||||
public class Activator implements BundleActivator {
|
||||
private ServiceRegistration<?> serviceCmd;
|
||||
private ServiceRegistration<?> serviceServerManager;
|
||||
private ServiceRegistration<?> serviceCmd, serviceServerManager;
|
||||
private ServiceTracker<?, BankObject> bankObjectTracker;
|
||||
private ServiceTracker<?, MinecraftServerFactory> mcServerFactoryTracker;
|
||||
private SingleServer singleServer;
|
||||
|
||||
public void start(BundleContext bundleContext) throws Exception {
|
||||
singleServer = new SingleServer(loadProperties(ASysUtils.GetProperty(bundleContext, "asys.config.dir", "conf")));
|
||||
mcServerFactoryTracker = new ServiceTracker<>(bundleContext, MinecraftServerFactory.class.getName(), null);
|
||||
mcServerFactoryTracker.open();
|
||||
|
||||
singleServer = new SingleServer(
|
||||
loadProperties(GetProperty(bundleContext, "asys.config.dir", "conf")),
|
||||
mcServerFactoryTracker);
|
||||
|
||||
bankObjectTracker = new ServiceTracker<>(bundleContext, BankObject.class.getName(), null);
|
||||
bankObjectTracker.open();
|
||||
BankObject bankObject = bankObjectTracker.getService();
|
||||
if (bankObject != null) singleServer.loadState(bankObject);
|
||||
|
||||
serviceServerManager = bundleContext.registerService(asys.api.ServerManager.class.getName(), singleServer, null);
|
||||
serviceServerManager = bundleContext.registerService(ServerManager.class.getName(), singleServer, null);
|
||||
serviceCmd = ASysUtils.RegisterCommands(bundleContext, new Commands(singleServer), "asys.server");
|
||||
}
|
||||
|
||||
@@ -43,6 +52,7 @@ public class Activator implements BundleActivator {
|
||||
if (bankObject != null) singleServer.saveState(bankObject);
|
||||
|
||||
bankObjectTracker.close();
|
||||
mcServerFactoryTracker.close();
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
|
||||
@@ -26,30 +26,30 @@ public class Commands {
|
||||
@Command
|
||||
@Descriptor("Server start")
|
||||
public void start() {
|
||||
serverManager.getServer().start();
|
||||
serverManager.getServer(null).start();
|
||||
log("Server start");
|
||||
}
|
||||
|
||||
@Command
|
||||
@Descriptor("Server stop")
|
||||
public void stop() {
|
||||
serverManager.getServer().stop();
|
||||
serverManager.removeServer();
|
||||
serverManager.getServer(null).stop();
|
||||
serverManager.removeServer(null);
|
||||
log("Server stop");
|
||||
}
|
||||
|
||||
@Command
|
||||
@Descriptor("Server force stop")
|
||||
public void kill() {
|
||||
serverManager.getServer().forceStop();
|
||||
serverManager.removeServer();
|
||||
serverManager.getServer(null).forceStop();
|
||||
serverManager.removeServer(null);
|
||||
log("Server kill");
|
||||
}
|
||||
|
||||
@Command
|
||||
@Descriptor("Server restart")
|
||||
public void restart() {
|
||||
MinecraftServer server = serverManager.getServer();
|
||||
MinecraftServer server = serverManager.getServer(null);
|
||||
server.stop();
|
||||
server.start();
|
||||
log("Server restart");
|
||||
@@ -60,7 +60,7 @@ public class Commands {
|
||||
public void alive() {
|
||||
boolean alive = false;
|
||||
|
||||
MinecraftServer server = serverManager.getServer();
|
||||
MinecraftServer server = serverManager.getServer(null);
|
||||
if (server != null) alive = server.isAlive();
|
||||
|
||||
log("Server alive: %s", alive);
|
||||
@@ -71,7 +71,7 @@ public class Commands {
|
||||
public void cmd(String... command) {
|
||||
StringJoiner sj = new StringJoiner(" ");
|
||||
Arrays.asList(command).forEach(sj::add);
|
||||
serverManager.getServer().sendCommand(sj.toString());
|
||||
serverManager.getServer(null).sendCommand(sj.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ package asys.singleserver;
|
||||
|
||||
import asys.api.BankObject;
|
||||
import asys.api.MinecraftServer;
|
||||
import asys.api.MinecraftServerFactory;
|
||||
import asys.api.ServerManager;
|
||||
import asys.singleserver.mcserver.MinecraftProcessServer;
|
||||
import asys.singleserver.mcserver.MinecraftScreenServer;
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
@@ -17,11 +17,12 @@ import java.util.Properties;
|
||||
|
||||
public class SingleServer implements ServerManager {
|
||||
private MinecraftServer mcServer;
|
||||
private ServiceTracker<?, MinecraftServerFactory> mcsFactoryTrcker;
|
||||
private Properties configuration;
|
||||
|
||||
public SingleServer(Properties configuration)
|
||||
{
|
||||
public SingleServer(Properties configuration, ServiceTracker<?, MinecraftServerFactory> mcsFactoryTrcker) {
|
||||
this.configuration = configuration;
|
||||
this.mcsFactoryTrcker = mcsFactoryTrcker;
|
||||
}
|
||||
|
||||
private void prepareMcServer() {
|
||||
@@ -35,26 +36,20 @@ public class SingleServer implements ServerManager {
|
||||
throw new RuntimeException(String.format("Main jar \"%s\" not found", mainJar.toString()));
|
||||
}
|
||||
|
||||
if (configuration.getProperty("server.implement", "process").equalsIgnoreCase("screen")) {
|
||||
System.out.println("McServer implements: screen");
|
||||
mcServer = new MinecraftScreenServer("mcserver", serverPath.toFile(), mainJar.toString(),
|
||||
configuration.getProperty("server.jvm.args", null),
|
||||
configuration.getProperty("server.params", null));
|
||||
} else {
|
||||
System.out.println("McServer implements: process");
|
||||
mcServer = new MinecraftProcessServer("mcserver", serverPath.toFile(), mainJar.toString(),
|
||||
configuration.getProperty("server.jvm.args", null),
|
||||
configuration.getProperty("server.params", null));
|
||||
MinecraftServerFactory mcFactory;
|
||||
try {
|
||||
mcFactory = mcsFactoryTrcker.waitForService(5000);
|
||||
} catch (InterruptedException ignored) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public MinecraftServer getServer() {
|
||||
if (mcServer == null) prepareMcServer();
|
||||
return mcServer;
|
||||
}
|
||||
if (mcFactory == null) {
|
||||
throw new RuntimeException(String.format("Service \"%s\" not found", MinecraftServerFactory.class.getName()));
|
||||
}
|
||||
|
||||
public void removeServer() {
|
||||
mcServer = null;
|
||||
mcServer = mcFactory.createServer("mcserver", serverPath.toFile(), mainJar.toString(),
|
||||
configuration.getProperty("server.jvm.args", null),
|
||||
configuration.getProperty("server.params", null));
|
||||
}
|
||||
|
||||
public void saveState(BankObject bankObject) {
|
||||
@@ -64,5 +59,16 @@ public class SingleServer implements ServerManager {
|
||||
public void loadState(BankObject bankObject) {
|
||||
mcServer = (MinecraftServer) bankObject.get(SingleServer.class.getName() + "#mcServer");
|
||||
}
|
||||
|
||||
@Override
|
||||
public MinecraftServer getServer(String name) {
|
||||
if (mcServer == null) prepareMcServer();
|
||||
return mcServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeServer(String name) {
|
||||
mcServer = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
server.path=server
|
||||
server.mainjar=spigot.jar
|
||||
server.params=
|
||||
server.jvm.args=
|
||||
# process, screen
|
||||
server.implement=process
|
||||
server.jvm.args=
|
||||
Reference in New Issue
Block a user