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