Allow tracking uptime of the internal web server similar to tracking API availability

This commit is contained in:
Thom van den Akker 2023-08-29 22:07:41 +02:00
parent 31d1b400f0
commit 980acd0f24
2 changed files with 90 additions and 0 deletions

View File

@ -679,6 +679,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.");
@ -1075,6 +1076,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) {
@ -1100,6 +1102,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();
}
}
}