Files
WebServer/src/main/java/org/openautonomousconnection/webserver/runtime/JavaPageDispatcher.java
2025-12-12 21:16:13 +01:00

41 lines
1.5 KiB
Java

package org.openautonomousconnection.webserver.runtime;
import org.openautonomousconnection.protocol.packets.v1_0_0.beta.WebRequestPacket;
import org.openautonomousconnection.protocol.packets.v1_0_0.beta.WebResponsePacket;
import org.openautonomousconnection.protocol.side.web.ConnectedWebClient;
import org.openautonomousconnection.protocol.side.web.ProtocolWebServer;
import org.openautonomousconnection.webserver.api.WebPage;
import org.openautonomousconnection.webserver.api.WebPageContext;
import java.io.File;
public final class JavaPageDispatcher {
private static final JavaPageCache CACHE = new JavaPageCache();
private JavaPageDispatcher() {}
public static WebResponsePacket dispatch(
ConnectedWebClient client,
ProtocolWebServer server,
WebRequestPacket request
) throws Exception {
if (request.getPath() == null) return null;
String p = request.getPath().startsWith("/") ? request.getPath().substring(1) : request.getPath();
File javaFile = new File(server.getContentFolder(), p + ".java");
if (!javaFile.exists() || !javaFile.isFile()) return null;
Class<?> clazz = CACHE.getOrCompile(javaFile);
Object instance = clazz.getDeclaredConstructor().newInstance();
if (!(instance instanceof WebPage page))
throw new IllegalStateException("Java page must implement WebPage");
WebPageContext ctx = new WebPageContext(client, server, request);
return page.handle(ctx);
}
}