Compare commits

...

3 Commits

Author SHA1 Message Date
Thom van den Akker 74ce5e54c0
Merge 78fcf355c6 into 9878719337 2023-12-26 11:08:59 -06:00
Thom van den Akker 78fcf355c6 Fix casing inconsistency 2023-08-29 22:20:49 +02:00
Thom van den Akker 980acd0f24 Allow tracking uptime of the internal web server similar to tracking API availability 2023-08-29 22:07:41 +02:00
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();
}
}
}