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

52 lines
1.6 KiB
Java

package io.gitlab.jfronny.libjf.web.impl.variant.shared;
import io.gitlab.jfronny.libjf.web.api.v1.AdvancedSubServer;
import io.gitlab.jfronny.libjf.web.impl.*;
import io.gitlab.jfronny.libjf.web.impl.util.ClaimPool;
import io.gitlab.jfronny.libjf.web.impl.variant.AbstractWebServer;
import java.util.LinkedHashSet;
import java.util.Set;
public class SharedWebServer extends AbstractWebServer {
public static final ClaimPool<Integer> gamePort = new ClaimPool<>();
public static final Set<Runnable> onActive = new LinkedHashSet<>();
public static void emitActive() {
for (Runnable runnable : onActive) runnable.run();
}
public SharedWebServer(RequestHandler handler) {
super(handler);
}
@Override
public String getServerRoot() {
Integer gamePort = this.gamePort.getTopmost();
if (gamePort == null) throw new UnsupportedOperationException("Attempted to get server root on unhosted server");
else return getServerRoot(gamePort);
}
@Override
public void stop() {
throw new UnsupportedOperationException("A shared server cannot be stopped");
}
@Override
public void queueRestart(Runnable callback) {
onActive.add(() -> {
for (AdvancedSubServer subServer : handler.subServers.values()) subServer.onStop();
handler.clear();
performRegistrations();
for (AdvancedSubServer subServer : handler.subServers.values()) subServer.onStart();
callback.run();
});
if (isActive()) emitActive();
}
@Override
public boolean isActive() {
return !gamePort.isEmpty();
}
}