2021-04-11 16:15:13 +02:00
|
|
|
/*
|
|
|
|
* This file is a part of the SteamWar software.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2020 SteamWar.de-Serverteam
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2021-04-11 16:53:44 +02:00
|
|
|
import org.apache.tools.ant.taskdefs.condition.Os
|
2021-04-11 18:56:02 +02:00
|
|
|
import org.codehaus.groovy.runtime.ProcessGroovyMethods
|
2021-04-11 16:53:44 +02:00
|
|
|
|
2021-04-11 16:15:13 +02:00
|
|
|
plugins {
|
|
|
|
// Adding the base plugin fixes the following gradle warnings in IntelliJ:
|
|
|
|
//
|
|
|
|
// Warning: root project 'module-work-multi': Unable to resolve all content root directories
|
|
|
|
// Details: java.lang.IllegalStateException: No value has been specified for this provider.
|
|
|
|
//
|
|
|
|
// Warning: root project 'module-work-multi': Unable to resolve additional project configuration.
|
|
|
|
// Details: java.lang.IllegalStateException: No value has been specified for this provider.
|
|
|
|
id 'base'
|
|
|
|
id 'application'
|
|
|
|
|
|
|
|
id 'com.github.johnrengelman.shadow' version '5.0.0'
|
|
|
|
}
|
|
|
|
|
|
|
|
group 'steamwar'
|
|
|
|
version ''
|
|
|
|
|
|
|
|
ext {
|
|
|
|
artifact = 'BauSystem'
|
|
|
|
|
|
|
|
uberJarName = "${artifact}-all.jar"
|
|
|
|
jarName = "${artifact}.jar"
|
|
|
|
libs = "${buildDir}/libs"
|
2021-04-11 16:53:44 +02:00
|
|
|
|
|
|
|
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
|
|
operatingSystem = "windows"
|
|
|
|
} else {
|
|
|
|
operatingSystem = "unix"
|
|
|
|
}
|
2021-04-11 16:15:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
compileJava.options.encoding = 'UTF-8'
|
|
|
|
|
|
|
|
sourceCompatibility = 1.8
|
|
|
|
targetCompatibility = 1.8
|
|
|
|
|
|
|
|
mainClassName = ''
|
|
|
|
|
|
|
|
allprojects {
|
|
|
|
repositories {
|
|
|
|
mavenCentral()
|
|
|
|
jcenter()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
implementation project(":BauSystem_Main")
|
|
|
|
}
|
|
|
|
|
|
|
|
task buildProject {
|
|
|
|
description 'Build this project'
|
|
|
|
group "Steamwar"
|
|
|
|
|
|
|
|
dependsOn build
|
|
|
|
}
|
|
|
|
|
|
|
|
task finalizeProject {
|
|
|
|
description 'Finalize this project'
|
|
|
|
group "Steamwar"
|
|
|
|
|
|
|
|
doLast {
|
|
|
|
if ("${buildDir}" == null) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
delete fileTree("${libs}").matching {
|
|
|
|
exclude("${uberJarName}")
|
|
|
|
}
|
|
|
|
file(libs + "/" + uberJarName).renameTo(file(libs + "/" + jarName))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
build.finalizedBy(finalizeProject)
|
|
|
|
|
|
|
|
if (project.hasProperty("hostname")) {
|
2021-04-12 10:49:52 +02:00
|
|
|
def server = "Dev1.15"
|
|
|
|
// def server = "Developer"
|
|
|
|
|
2021-04-11 16:15:13 +02:00
|
|
|
task uploadProject {
|
|
|
|
description 'Upload this project'
|
|
|
|
group "Steamwar"
|
|
|
|
|
|
|
|
doLast {
|
2021-04-12 09:15:24 +02:00
|
|
|
await(shell("scp ${libs}/${jarName} ${hostname}:~/${server}/plugins"))
|
|
|
|
if (!answer("Start ${server} server?")) {
|
2021-04-11 16:15:13 +02:00
|
|
|
return
|
|
|
|
}
|
2021-04-12 09:15:24 +02:00
|
|
|
serverStart(server)
|
2021-04-11 16:15:13 +02:00
|
|
|
}
|
|
|
|
}
|
2021-04-12 10:49:52 +02:00
|
|
|
|
|
|
|
task startDevServer {
|
|
|
|
description 'Start the DevServer'
|
|
|
|
group "Steamwar"
|
|
|
|
|
|
|
|
doLast {
|
|
|
|
serverStart(server)
|
|
|
|
}
|
|
|
|
}
|
2021-04-11 16:15:13 +02:00
|
|
|
}
|
|
|
|
|
2021-04-11 18:56:02 +02:00
|
|
|
def await(Process proc) {
|
|
|
|
def out = new StringBuilder()
|
|
|
|
def err = new StringBuilder()
|
|
|
|
proc.waitForProcessOutput(out, err)
|
2021-04-12 09:24:27 +02:00
|
|
|
return [out, err, proc.exitValue()]
|
2021-04-11 18:56:02 +02:00
|
|
|
}
|
|
|
|
|
2021-04-11 16:15:13 +02:00
|
|
|
def shell(String command) {
|
2021-04-11 16:53:44 +02:00
|
|
|
if (operatingSystem == "unix") {
|
2021-04-12 09:23:42 +02:00
|
|
|
return ['bash', '-c', command].execute()
|
2021-04-11 16:53:44 +02:00
|
|
|
} else {
|
2021-04-12 09:23:42 +02:00
|
|
|
return ["cmd", "/c", command].execute()
|
2021-04-11 16:53:44 +02:00
|
|
|
}
|
2021-04-11 16:15:13 +02:00
|
|
|
}
|
|
|
|
|
2021-04-12 09:15:24 +02:00
|
|
|
def serverStart(String serverName) {
|
|
|
|
def proc = shell("ssh -t ${hostname} \"./mc ${serverName}\"")
|
2021-04-11 18:56:02 +02:00
|
|
|
|
2021-04-12 10:49:52 +02:00
|
|
|
Thread outputThread = new Thread({
|
|
|
|
Reader reader = proc.getInputStream().newReader();
|
|
|
|
Writer writer = System.out.newWriter();
|
|
|
|
try {
|
|
|
|
while (proc.alive) {
|
|
|
|
String s = reader.readLine()
|
|
|
|
if (s == null) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if (s.contains("SteamWar? Unbekannter Befehl.")) {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
writer.write(s + "\n")
|
|
|
|
writer.flush()
|
|
|
|
}
|
|
|
|
} catch (IOException e) {
|
|
|
|
// Ignored
|
|
|
|
}
|
|
|
|
})
|
2021-04-12 09:15:24 +02:00
|
|
|
outputThread.setName("${serverName} - OutputThread")
|
2021-04-12 10:49:52 +02:00
|
|
|
outputThread.start()
|
2021-04-11 18:56:02 +02:00
|
|
|
|
2021-04-12 10:49:52 +02:00
|
|
|
Writer writer
|
2021-04-12 10:02:17 +02:00
|
|
|
Thread inputThread = new Thread({
|
|
|
|
Reader reader = System.in.newReader()
|
2021-04-12 10:49:52 +02:00
|
|
|
writer = proc.getOutputStream().newWriter()
|
2021-04-12 10:02:17 +02:00
|
|
|
try {
|
|
|
|
while (proc.alive) {
|
|
|
|
String s = reader.readLine()
|
|
|
|
writer.write(s + "\n")
|
|
|
|
writer.flush()
|
2021-04-11 18:56:02 +02:00
|
|
|
}
|
2021-04-12 10:02:17 +02:00
|
|
|
} catch (IOException e) {
|
|
|
|
// Ignored
|
2021-04-11 18:56:02 +02:00
|
|
|
}
|
|
|
|
})
|
2021-04-12 09:15:24 +02:00
|
|
|
inputThread.setName("${serverName} - InputThread")
|
2021-04-11 18:56:02 +02:00
|
|
|
inputThread.start()
|
|
|
|
|
2021-04-12 10:02:17 +02:00
|
|
|
gradle.buildFinished { buildResult ->
|
|
|
|
if (!proc.alive) {
|
|
|
|
return
|
|
|
|
}
|
2021-04-12 10:49:52 +02:00
|
|
|
writer = proc.getOutputStream().newWriter()
|
2021-04-12 10:02:17 +02:00
|
|
|
writer.write("stop\n")
|
|
|
|
writer.flush()
|
2021-04-12 11:32:06 +02:00
|
|
|
awaitClose(proc, outputThread, inputThread)
|
2021-04-12 10:02:17 +02:00
|
|
|
}
|
2021-04-12 11:32:06 +02:00
|
|
|
awaitClose(proc, outputThread, inputThread)
|
|
|
|
}
|
2021-04-12 10:02:17 +02:00
|
|
|
|
2021-04-12 11:32:06 +02:00
|
|
|
private static def awaitClose(Process proc, Thread outputThread, Thread inputThread) {
|
2021-04-11 18:56:02 +02:00
|
|
|
while (proc.alive) {
|
|
|
|
Thread.sleep(10)
|
|
|
|
}
|
2021-04-12 11:32:06 +02:00
|
|
|
proc.closeStreams()
|
2021-04-11 18:56:02 +02:00
|
|
|
outputThread.interrupt()
|
|
|
|
inputThread.interrupt()
|
2021-04-12 11:04:15 +02:00
|
|
|
}
|
2021-04-11 18:56:02 +02:00
|
|
|
|
2021-04-11 16:15:13 +02:00
|
|
|
def answer(String question) {
|
|
|
|
while (System.in.available() > 0) System.in.read()
|
|
|
|
println(question)
|
2021-04-11 21:38:16 +02:00
|
|
|
boolean valid = "Yy".contains(((char)System.in.read()).toString())
|
|
|
|
while (System.in.available() > 0) System.in.read()
|
|
|
|
return valid
|
2021-04-11 16:15:13 +02:00
|
|
|
}
|