43 lines
1.5 KiB
Java
43 lines
1.5 KiB
Java
package io.gitlab.jfronny.libjf.mainhttp.impl;
|
|
|
|
import io.gitlab.jfronny.libjf.mainhttp.api.v0.MainHttpHandler;
|
|
import io.gitlab.jfronny.libjf.mainhttp.impl.util.ClaimPool;
|
|
import net.fabricmc.fabric.api.event.Event;
|
|
import net.fabricmc.fabric.api.event.EventFactory;
|
|
import net.fabricmc.loader.api.FabricLoader;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.util.List;
|
|
|
|
public class MainHttp {
|
|
public static final Event<Runnable> ON_ACTIVATE = EventFactory.createArrayBacked(Runnable.class, listeners -> () -> {
|
|
for (Runnable listener : listeners) listener.run();
|
|
});
|
|
public static final ClaimPool<Integer> GAME_PORT = new ClaimPool<>();
|
|
public static final String MOD_ID = "libjf-mainhttp";
|
|
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
|
|
private static final List<MainHttpHandler> activeHandlers = FabricLoader.getInstance()
|
|
.getEntrypoints(MOD_ID + ":v0", MainHttpHandler.class)
|
|
.stream()
|
|
.filter(MainHttpHandler::isActive)
|
|
.toList();
|
|
private static final byte[] NOT_FOUND = """
|
|
HTTP/1.1 404 Not Found
|
|
Connection: keep-alive
|
|
Content-Length: 0
|
|
""".getBytes();
|
|
|
|
public static boolean isEnabled() {
|
|
return !activeHandlers.isEmpty();
|
|
}
|
|
|
|
public static byte[] handle(byte[] request) {
|
|
for (MainHttpHandler handler : activeHandlers) {
|
|
byte[] option = handler.handle(request);
|
|
if (option != null) return option;
|
|
}
|
|
return NOT_FOUND;
|
|
}
|
|
}
|