LibJF/libjf-web-v1/src/main/java/io/gitlab/jfronny/libjf/web/impl/variant/shared/SharedWebServer.java

51 lines
1.4 KiB
Java

package io.gitlab.jfronny.libjf.web.impl.variant.shared;
import io.gitlab.jfronny.libjf.mainhttp.api.v0.ServerState;
import io.gitlab.jfronny.libjf.web.impl.host.RequestHandler;
import io.gitlab.jfronny.libjf.web.impl.variant.AbstractWebServer;
import java.util.*;
public class SharedWebServer extends AbstractWebServer {
public static final Set<Runnable> onActive = new LinkedHashSet<>();
public static void emitActive() {
for (Iterator<Runnable> iterator = onActive.iterator(); iterator.hasNext(); iterator.remove()) {
Runnable runnable = iterator.next();
runnable.run();
}
}
public SharedWebServer(RequestHandler handler) {
super(handler);
}
@Override
public String getServerRoot() {
if (!ServerState.isActive()) throw new UnsupportedOperationException("Attempted to get server root on unhosted server");
else return getServerRoot(ServerState.getPort());
}
@Override
public void stop() {
throw new UnsupportedOperationException("A shared server cannot be stopped");
}
@Override
public void queueRestart(Runnable callback) {
onActive.add(() -> {
emitStop();
handler.clear();
performRegistrations();
emitStart();
callback.run();
});
if (isActive()) emitActive();
}
@Override
public boolean isActive() {
return ServerState.isActive();
}
}