This commit is contained in:
Thom van den Akker 2024-01-24 22:27:11 +01:00 committed by GitHub
commit a4bf141ad9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 90 additions and 0 deletions

View File

@ -688,6 +688,7 @@ public class DynmapCore implements DynmapCommonAPI {
Log.warning("Using external server, but " + JsonFileClientUpdateComponent.class.toString() + " is DISABLED!");
webserverCompConfigWarn = true;
}
DynmapWebserverStateListener.stateWebserverDisabled();
}
if (webserverCompConfigWarn) {
Log.warning("If the website is missing files or not loading/updating, this might be why.");
@ -1084,6 +1085,7 @@ public class DynmapCore implements DynmapCommonAPI {
try {
if(webServer != null) {
webServer.start();
DynmapWebserverStateListener.stateWebserverStarted();
Log.info("Web server started on address " + webhostname + ":" + webport);
}
} catch (Exception e) {
@ -1109,6 +1111,7 @@ public class DynmapCore implements DynmapCommonAPI {
Log.severe("Failed to stop WebServer!", e);
}
webServer = null;
DynmapWebserverStateListener.stateWebserverStopped();
}
if (componentManager != null) {

View File

@ -0,0 +1,87 @@
package org.dynmap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Listener class for the Dynmap integrated web server lifecycle, will only work if the internal webserver is actually being used.
*/
public abstract class DynmapWebserverStateListener
{
/**
* Status flag indicating if the web server is online or offline.
*/
private static boolean webserverStarted = false;
private static final CopyOnWriteArrayList<DynmapWebserverStateListener> listeners = new CopyOnWriteArrayList<>();
/**
* Called when API becomes enabled, or during call to register listener if API is already enabled
*/
public abstract void webserverStarted();
/**
* Called when API becomes enabled, or during call to register listener if API is already enabled
*/
public abstract void webserverStopped();
/**
* This method is fired to indicate the listener that the internal web server is not enabled, thus indicating that {@link DynmapWebserverStateListener#webserverStarted()} and {@link DynmapWebserverStateListener#webserverStopped()} will not fire.
*/
public void webserverDisabled() {}
/**
* Register listener instance
*
* @param listener - listener to register
*/
public static void register(DynmapWebserverStateListener listener)
{
listeners.add(listener);
if (webserverStarted)
{
listener.webserverStarted();
}
}
/**
* Unregister listener instance
*
* @param listener - listener to unregister
*/
public static void unregister(DynmapWebserverStateListener listener) {
listeners.remove(listener);
}
// Internal call - MODS/PLUGINS MUST NOT USE
public static void stateWebserverStarted()
{
if (webserverStarted)
{
stateWebserverStopped();
}
webserverStarted = true;
for (DynmapWebserverStateListener l : listeners)
{
l.webserverStarted();
}
}
// Internal call - MODS/PLUGINS MUST NOT USE
public static void stateWebserverStopped()
{
for (DynmapWebserverStateListener l : listeners)
{
l.webserverStopped();
}
webserverStarted = false;
}
// Internal call - MODS/PLUGINS MUST NOT USE
public static void stateWebserverDisabled()
{
for (DynmapWebserverStateListener l : listeners)
{
l.webserverDisabled();
}
}
}