/* * 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 . */ import org.apache.tools.ant.taskdefs.condition.Os import org.codehaus.groovy.runtime.ProcessGroovyMethods 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" if (Os.isFamily(Os.FAMILY_WINDOWS)) { operatingSystem = "windows" } else { operatingSystem = "unix" } } 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")) { task uploadProject { description 'Upload this project' group "Steamwar" doLast { def server = "Dev1.15" // def server = "Developer" await(shell("scp ${libs}/${jarName} ${hostname}:~/${server}/plugins")) if (!answer("Start ${server} server?")) { return } serverStart(server) } } } def await(Process proc) { def out = new StringBuilder() def err = new StringBuilder() proc.waitForProcessOutput(out, err) } def shell(String command) { if (operatingSystem == "unix") { return ['bash', '-c', command].execute() } else { return ["cmd", "/c", command].execute() } } def serverStart(String serverName) { def proc = shell("ssh -t ${hostname} \"./mc ${serverName}\"") Thread outputThread = proc.consumeProcessOutputStream(System.out) outputThread.setName("${serverName} - OutputThread") Thread inputThread = new Thread(new Runnable() { @Override void run() { Reader reader = System.in.newReader() Writer writer = proc.getOutputStream().newWriter() try { while (true) { String s = reader.readLine() writer.write(s + "\n") writer.flush() } } catch (InterruptedIOException e) { } } }) inputThread.setName("${serverName} - InputThread") inputThread.start() while (proc.alive) { Thread.sleep(10) } outputThread.interrupt() inputThread.interrupt() }; def answer(String question) { while (System.in.available() > 0) System.in.read() println(question) boolean valid = "Yy".contains(((char)System.in.read()).toString()) while (System.in.available() > 0) System.in.read() return valid }