52 lines
1.6 KiB
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();
|
|
}
|
|
}
|