diff --git a/src/main/java/me/jonasjones/mcwebserver/config/ModConfigs.java b/src/main/java/me/jonasjones/mcwebserver/config/ModConfigs.java index 3197c9f..bb994ba 100644 --- a/src/main/java/me/jonasjones/mcwebserver/config/ModConfigs.java +++ b/src/main/java/me/jonasjones/mcwebserver/config/ModConfigs.java @@ -19,6 +19,8 @@ public class ModConfigs { public static Boolean ADV_API_ENABLED; public static Boolean API_INGAME_COMMAND_ENABLED; public static String WEB_FILE_NOSUPPORT; + + public static Boolean PHP_ENABLED; public static Boolean VERBOSE = false; //needs to be set to false since the verbose logger is called before config file is fully loaded @@ -48,6 +50,7 @@ public class ModConfigs { config.addKeyValuePair(new Pair<>("web.api.cmd", true), "whether or not the ingame command to manage tokens should be enabled or not"); config.addKeyValuePair(new Pair<>("web.file.notSupported", "not_supported.html"), "the name of the html file for 'not supported' page"); config.addKeyValuePair(new Pair<>("logger.verbose", false), "whether or not to log verbose output"); + config.addKeyValuePair(new Pair<>("web.php", false), "enable php"); } private static void assignConfigs() { @@ -61,5 +64,6 @@ public class ModConfigs { API_INGAME_COMMAND_ENABLED = CONFIG.getOrDefault("web.api.cmd", true); WEB_FILE_NOSUPPORT = CONFIG.getOrDefault("web.file.notSupported", "not_supported.html"); VERBOSE = CONFIG.getOrDefault("logger.verbose", true); + PHP_ENABLED = CONFIG.getOrDefault("web.php", false); } } diff --git a/src/main/java/me/jonasjones/mcwebserver/mixin/WebserverStopMixin.java b/src/main/java/me/jonasjones/mcwebserver/mixin/WebserverStopMixin.java index a5cea04..ba2d49c 100644 --- a/src/main/java/me/jonasjones/mcwebserver/mixin/WebserverStopMixin.java +++ b/src/main/java/me/jonasjones/mcwebserver/mixin/WebserverStopMixin.java @@ -3,6 +3,7 @@ package me.jonasjones.mcwebserver.mixin; import me.jonasjones.mcwebserver.McWebserver; import me.jonasjones.mcwebserver.config.ModConfigs; import me.jonasjones.mcwebserver.web.ServerHandler; +import me.jonasjones.mcwebserver.web.php.PhpServer; import net.minecraft.server.MinecraftServer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -16,5 +17,6 @@ public class WebserverStopMixin { McWebserver.LOGGER.info("Stopping Webserver..."); ModConfigs.VERBOSE = false; ServerHandler.mcserveractive = false; + PhpServer.stop(); } } diff --git a/src/main/java/me/jonasjones/mcwebserver/web/ServerHandler.java b/src/main/java/me/jonasjones/mcwebserver/web/ServerHandler.java index 536c0af..ed15b2b 100644 --- a/src/main/java/me/jonasjones/mcwebserver/web/ServerHandler.java +++ b/src/main/java/me/jonasjones/mcwebserver/web/ServerHandler.java @@ -1,6 +1,7 @@ package me.jonasjones.mcwebserver.web; import me.jonasjones.mcwebserver.config.ModConfigs; +import me.jonasjones.mcwebserver.web.php.PhpServer; import net.fabricmc.loader.api.FabricLoader; import java.net.HttpURLConnection; @@ -75,11 +76,14 @@ public class ServerHandler implements Runnable { } public void run() { - if (ModConfigs.IS_ENABLED) { + if ((ModConfigs.IS_ENABLED && !ModConfigs.PHP_ENABLED)) { LOGGER.info("Starting Webserver..."); new HttpServer(socket); HttpServer.main(); + } else if (ModConfigs.PHP_ENABLED) { + LOGGER.info("Starting php Webserver..."); + PhpServer.main(); } else { LOGGER.info("Webserver disabled in the config file."); } diff --git a/src/main/java/me/jonasjones/mcwebserver/web/php/PhpServer.java b/src/main/java/me/jonasjones/mcwebserver/web/php/PhpServer.java new file mode 100644 index 0000000..8b3d9c7 --- /dev/null +++ b/src/main/java/me/jonasjones/mcwebserver/web/php/PhpServer.java @@ -0,0 +1,53 @@ +package me.jonasjones.mcwebserver.web.php; + +import me.jonasjones.mcwebserver.McWebserver; +import org.jetbrains.annotations.NotNull; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import static me.jonasjones.mcwebserver.config.ModConfigs.WEB_PORT; +import static me.jonasjones.mcwebserver.config.ModConfigs.WEB_ROOT; + +public class PhpServer { + private static Process process; + + public static void main() { + try { + + process = getProcess(); + + // Read the output + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + McWebserver.VERBOSELOGGER.info(line); + } + + McWebserver.LOGGER.info("PHP server started!"); + } catch (IOException e) { + McWebserver.LOGGER.error("Error with PHP server: ", e); + } + } + + @NotNull + private static Process getProcess() throws IOException { + + // Build the command to start the PHP built-in web server + String command = String.format("php -S localhost:%d -t %s", WEB_PORT, WEB_ROOT); + + // Start the process + ProcessBuilder processBuilder = new ProcessBuilder(command.split("\\s+")); + processBuilder.redirectErrorStream(true); + return processBuilder.start(); + } + + public static void stop() { + if (process == null || !process.isAlive()) { + return; + } + process.destroy(); + McWebserver.LOGGER.info("PHP server stopped!"); + } +}