diff --git a/SingleServer/pom.xml b/SingleServer/pom.xml
index c0936d8..2efa5e4 100644
--- a/SingleServer/pom.xml
+++ b/SingleServer/pom.xml
@@ -20,14 +20,14 @@
asys
singleserver
- 0.2
+ 0.3
bundle
asys
api
- 0.5
+ 0.6
org.osgi
diff --git a/SingleServer/src/main/java/asys/singleserver/Activator.java b/SingleServer/src/main/java/asys/singleserver/Activator.java
index c75c5da..e267af9 100644
--- a/SingleServer/src/main/java/asys/singleserver/Activator.java
+++ b/SingleServer/src/main/java/asys/singleserver/Activator.java
@@ -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")
diff --git a/SingleServer/src/main/java/asys/singleserver/Commands.java b/SingleServer/src/main/java/asys/singleserver/Commands.java
index 022205b..3efe43e 100644
--- a/SingleServer/src/main/java/asys/singleserver/Commands.java
+++ b/SingleServer/src/main/java/asys/singleserver/Commands.java
@@ -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());
}
}
diff --git a/SingleServer/src/main/java/asys/singleserver/SingleServer.java b/SingleServer/src/main/java/asys/singleserver/SingleServer.java
index 9fb5b90..a2a9908 100644
--- a/SingleServer/src/main/java/asys/singleserver/SingleServer.java
+++ b/SingleServer/src/main/java/asys/singleserver/SingleServer.java
@@ -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;
+ }
}
diff --git a/SingleServer/src/main/resources/asys-singleserver.properties b/SingleServer/src/main/resources/asys-singleserver.properties
index 866c22a..d9b2713 100644
--- a/SingleServer/src/main/resources/asys-singleserver.properties
+++ b/SingleServer/src/main/resources/asys-singleserver.properties
@@ -1,6 +1,4 @@
server.path=server
server.mainjar=spigot.jar
server.params=
-server.jvm.args=
-# process, screen
-server.implement=process
\ No newline at end of file
+server.jvm.args=
\ No newline at end of file