Fixed webserver not stopping properly

This commit is contained in:
Jonas_Jones 2024-01-10 01:24:02 +01:00
parent 3bacb4b181
commit 3fd5ae28aa

View file

@ -1,11 +1,11 @@
package me.jonasjones.mcwebserver.web; package me.jonasjones.mcwebserver.web;
import com.roxstudio.utils.CUrl;
import me.jonasjones.mcwebserver.config.ModConfigs; import me.jonasjones.mcwebserver.config.ModConfigs;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import java.net.HttpURLConnection;
import java.net.Socket; import java.net.Socket;
import java.net.URL;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -23,15 +23,38 @@ public class ServerHandler implements Runnable {
public static void start() { public static void start() {
webserverthread.setName("McWebserver-webserver"); webserverthread.setName("McWebserver-webserver");
webserverthread.start(); webserverthread.start();
// check if webserver is running
// if not, stop the webserver
// runs a loop while the webserver thread is alive
// makes requests to the webserver until it dies (while the thread is listening for requests, it can't die and only checks if the server is running after a request)
// truly a hacky and awful way to do this, but it works
Thread serverthread = new Thread(() -> { Thread serverthread = new Thread(() -> {
while (true) { while (webserverthread.isAlive()) {
if (!mcserveractive) { if (!mcserveractive) {
sleep(2); sleep(2);
for (int i = 0; i < 2; i++) { try {
CUrl curl = new CUrl("http://localhost:" + WEB_PORT + "/api/v1/dummy").timeout(1, 1); // a truly awful way of stopping this thread // Create URL
curl.exec(); URL url = new URL("http://localhost:" + WEB_PORT + "/api/v1/dummy");
sleep(1);
} // Open connection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Set request method
connection.setRequestMethod("GET");
// Set connection timeout (milliseconds)
connection.setConnectTimeout(1000);
// Set read timeout (milliseconds)
connection.setReadTimeout(1000);
// Get response code (optional, but useful for debugging)
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// Close connection
connection.disconnect();
} catch (Exception ignored) {}
LOGGER.info("Webserver Stopped!"); LOGGER.info("Webserver Stopped!");
break; break;
} else { } else {