This commit is contained in:
Radek Davidek 2025-11-01 16:18:56 +01:00
parent abcd9ff04d
commit 63a4549a8d

View File

@ -1,12 +1,10 @@
package cz.kamma.czb; package cz.kamma.czb;
import com.fasterxml.jackson.databind.JsonNode; import java.io.BufferedReader;
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException;
import com.sun.net.httpserver.HttpExchange; import java.io.InputStream;
import com.sun.net.httpserver.HttpHandler; import java.io.InputStreamReader;
import com.sun.net.httpserver.HttpServer; import java.io.OutputStream;
import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.URL; import java.net.URL;
@ -16,6 +14,12 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class BasketballServer { public class BasketballServer {
private static JsonNode cachedData; private static JsonNode cachedData;
@ -30,7 +34,7 @@ public class BasketballServer {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/api/matches", new ApiHandler()); server.createContext("/api/matches", new ApiHandler());
server.createContext("/", new WebHandler("src/main/resources/index.html")); server.createContext("/", new WebHandler());
server.setExecutor(Executors.newFixedThreadPool(4)); server.setExecutor(Executors.newFixedThreadPool(4));
server.start(); server.start();
@ -90,21 +94,62 @@ public class BasketballServer {
// --- Web UI handler --- // --- Web UI handler ---
static class WebHandler implements HttpHandler { static class WebHandler implements HttpHandler {
private final String htmlFile;
public WebHandler(String htmlFile) { this.htmlFile = htmlFile; } public WebHandler() {
}
@Override @Override
public void handle(HttpExchange exchange) throws IOException { public void handle(HttpExchange exchange) throws IOException {
File file = new File(htmlFile); try {
if (!file.exists()) { exchange.sendResponseHeaders(404, -1); return; } String path = exchange.getRequestURI().getPath();
if ("/".equals(path) || path.isEmpty() || path.equals("/index.html")) {
byte[] bytes = java.nio.file.Files.readAllBytes(file.toPath()); String html = readResource("/index.html");
exchange.getResponseHeaders().set("Content-Type", "text/html; charset=UTF-8"); if (html == null) {
sendError(exchange, 404, "index.html not found in resources");
return;
}
exchange.getResponseHeaders().set("Content-Type", "text/html; charset=utf-8");
byte[] bytes = html.getBytes(StandardCharsets.UTF_8);
exchange.sendResponseHeaders(200, bytes.length); exchange.sendResponseHeaders(200, bytes.length);
OutputStream os = exchange.getResponseBody(); try (OutputStream os = exchange.getResponseBody()) {
os.write(bytes); os.write(bytes);
os.close(); os.flush();
}
} else {
sendError(exchange, 404, "Not found");
}
} catch (Exception e) {
e.printStackTrace();
sendError(exchange, 500, e.getMessage());
}
}
}
// ======= Chyba =======
private static void sendError(HttpExchange exchange, int code, String message) throws IOException {
exchange.getResponseHeaders().set("Content-Type", "text/plain; charset=utf-8");
byte[] bytes = message.getBytes(StandardCharsets.UTF_8);
exchange.sendResponseHeaders(code, bytes.length);
try (OutputStream os = exchange.getResponseBody()) {
os.write(bytes);
}
}
private static String readResource(String resourcePath) {
try (InputStream is = BasketballServer.class.getResourceAsStream(resourcePath)) {
if (is == null)
return null;
try (BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
return sb.toString();
}
} catch (IOException e) {
e.printStackTrace();
return null;
} }
} }
} }