Made things configurable

This commit is contained in:
Norbi Peti 2018-06-12 23:50:36 +02:00
parent 7b500f35b8
commit c83339ce42
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
7 changed files with 112 additions and 46 deletions

16
.idea/compiler.xml Normal file
View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="ButtonServerRunner" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="ButtonServerRunner" target="1.8" />
</bytecodeTargetLevel>
</component>
</project>

View file

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: jline:jline:2.12">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/jline/jline/2.12/jline-2.12.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/jline/jline/2.12/jline-2.12-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/jline/jline/2.12/jline-2.12-sources.jar!/" />
</SOURCES>
</library>
</component>

11
.idea/misc.xml Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>

6
.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

19
pom.xml
View file

@ -18,6 +18,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
@ -28,6 +29,18 @@
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
@ -36,5 +49,11 @@
<artifactId>jline</artifactId>
<version>2.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.yaml/snakeyaml -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.21</version>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,18 @@
package buttondevteam.serverrunner;
public class Config {
public String serverVersion;
public String serverParams;
public int restartAt;
public Config(String serverVersion, String serverParams, int restartAt) {
this.serverVersion = serverVersion;
this.serverParams = serverParams;
this.restartAt = restartAt;
}
public Config() {
this.serverVersion = "1.12.2";
this.serverParams = "-Djline.terminal=jline.UnixTerminal -Xms4G -Xmx6G";
this.restartAt = 12;
}
}

View file

@ -1,29 +1,24 @@
package buttondevteam.serverrunner;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.regex.Pattern;
import jline.console.ConsoleReader;
import jline.console.CursorBuffer;
import org.yaml.snakeyaml.Yaml;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Calendar;
import java.util.Collections;
import java.util.TimeZone;
import java.util.regex.Pattern;
public class ServerRunner {
private static final int RESTART_HOUR = 12;
private static final int RESTART_MESSAGE_COUNT = 60;
private static final int interval = 24; // hours
private static volatile String server_version; // SET VERSION IN RUN.SH
private static volatile boolean stop = false;
private static volatile int restartcounter = RESTART_MESSAGE_COUNT;
private static int restartcounter = RESTART_MESSAGE_COUNT;
private static volatile Process serverprocess;
private static volatile PrintWriter serveroutput;
private static volatile Thread rt;
@ -32,37 +27,24 @@ public class ServerRunner {
private static volatile boolean customrestartfailed = false;
public static void main(String[] args) throws IOException, InterruptedException {
String minmem;
String maxmem;
if (args.length == 3) {
if ((!args[0].contains("G") && !args[0].contains("M"))
|| (!args[1].contains("G") && !args[0].contains("M"))) {
System.out.println("Error: Invalid arguments.");
System.out.println("Usage: java -jar ServerRunner.jar <minmem> <maxmem> <version>");
System.out.println("Example: java -jar ServerRunner.jar 1G 2G");
return;
}
minmem = args[0];
maxmem = args[1];
server_version = args[2];
} else {
System.out.println("Error: Wrong number of arguments.");
System.out.println("Usage: java -jar ServerRunner.jar <minmem> <maxmem> <version>");
System.out.println("Example: java -jar ServerRunner.jar 1G 2G 1.9.2");
public static void main(String[] args) throws IOException {
Yaml yaml = new Yaml();
File f=new File("plugins/ServerRunner/config.yml");
f.getParentFile().mkdirs();
final Config config;
if(!f.exists())
Files.write(f.toPath(), Collections.singleton(yaml.dump(config = new Config())));
else
config=yaml.load(new FileInputStream(f));
if (!new File("spigot-" + config.serverVersion + ".jar").exists()) {
System.out.println("The server JAR for " + config.serverVersion + " cannot be found!");
return;
}
if (!new File("spigot-" + server_version + ".jar").exists()) {
System.out.println("The server JAR for " + server_version + " cannot be found!");
return;
}
final String fminmem = minmem;
final String fmaxmem = maxmem;
reader = new ConsoleReader();
reader.setPrompt("Runner>");
runnerout = new PrintWriter(reader.getOutput());
writeToScreen("Starting server...");
serverprocess = startServer(minmem, maxmem);
serverprocess = startServer(config);
serveroutput = new PrintWriter(serverprocess.getOutputStream());
rt = Thread.currentThread();
final Thread it = new Thread() {
@ -100,20 +82,22 @@ public class ServerRunner {
writeToScreen("A server is already running!");
}
if (Pattern.matches(
"[\\d\\d:\\d\\d:\\d\\d INFO]: Unknown command. Type \"/help\" for help.\\s+", line))
"\\[\\d\\d:\\d\\d:\\d\\d INFO]: Unknown command. Type \"/help\" for help.\\s+", line))
customrestartfailed = true;
} else if (!stop) {
try {
serverinput.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
serveroutput.close();
} catch (Exception e) {
e.printStackTrace();
}
writeToScreen("Server stopped! Restarting...");
serverprocess = startServer(fminmem, fmaxmem);
serverprocess = startServer(config);
serverinput = new BufferedReader(new InputStreamReader(serverprocess.getInputStream()));
serveroutput = new PrintWriter(serverprocess.getOutputStream());
restartcounter = RESTART_MESSAGE_COUNT;
@ -131,7 +115,7 @@ public class ServerRunner {
ot.setName("OutputThread");
ot.start();
Thread.currentThread().setName("RestarterThread");
long starttime = syncStart(RESTART_HOUR);
long starttime = syncStart(config.restartAt);
System.out.println("Restart scheduled in " + starttime / 3600000f);
boolean firstrun = true;
while (!stop) {
@ -175,9 +159,8 @@ public class ServerRunner {
writeToScreen("Stopped " + Thread.currentThread().getName());
}
private static Process startServer(String minmem, String maxmem) throws IOException {
return Runtime.getRuntime().exec(new String[] { "java", "-Djline.terminal=jline.UnixTerminal", "-Xms" + minmem,
"-Xmx" + maxmem, "-XX:MaxPermSize=128M", "-jar", "spigot-" + server_version + ".jar" });
private static Process startServer(Config config) throws IOException {
return Runtime.getRuntime().exec(("java "+config.serverParams+" -jar spigot-" + config.serverVersion + ".jar").split(" "));
}
private static void sendMessage(PrintWriter output, String color, String text) {