From edae199b00875a4d4d3136d017032a6395b9184c Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 15 Aug 2016 16:09:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F:=20Si?= =?UTF-8?q?ngleServer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Переход на использование внешних модулей, реализующих интерфейс MinecraftServer и предоставляющих сервис MinecraftServerFactory. --- SingleServer/pom.xml | 4 +- .../java/asys/singleserver/Activator.java | 18 +++++-- .../main/java/asys/singleserver/Commands.java | 16 +++---- .../java/asys/singleserver/SingleServer.java | 48 +++++++++++-------- .../resources/asys-singleserver.properties | 4 +- 5 files changed, 52 insertions(+), 38 deletions(-) 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 bankObjectTracker; + private ServiceTracker 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 mcsFactoryTrcker; private Properties configuration; - public SingleServer(Properties configuration) - { + public SingleServer(Properties configuration, ServiceTracker 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