Created the MCDashWrapper.java
This commit is contained in:
parent
9af614d22a
commit
36b59f8316
141
src/main/java/de/gnmyt/mcdash/MCDashWrapper.java
Normal file
141
src/main/java/de/gnmyt/mcdash/MCDashWrapper.java
Normal file
@ -0,0 +1,141 @@
|
||||
package de.gnmyt.mcdash;
|
||||
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import de.gnmyt.mcdash.api.ConfigurationManager;
|
||||
import de.gnmyt.mcdash.api.DashShutdownHook;
|
||||
import de.gnmyt.mcdash.api.Logger;
|
||||
import de.gnmyt.mcdash.api.ServerManager;
|
||||
import de.gnmyt.mcdash.handler.DefaultHandler;
|
||||
import de.gnmyt.mcdash.handler.StaticHandler;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class MCDashWrapper {
|
||||
|
||||
private static final File DATA_FOLDER = new File("data");
|
||||
private static final Logger LOG = new Logger(MCDashWrapper.class);
|
||||
private static final ConfigurationManager config = new ConfigurationManager();
|
||||
private static final int SERVER_PORT = System.getenv("PORT") != null ? Integer.parseInt(System.getenv("PORT")) : 7865;
|
||||
private static final ServerManager serverManager = new ServerManager();
|
||||
|
||||
private static HttpServer server;
|
||||
|
||||
/**
|
||||
* The main method of the MCDash Wrapper.
|
||||
* This method will start the server and initialize the server manager
|
||||
* <p>
|
||||
* The server will also be stopped when the application is being shut down
|
||||
* (This is done by the {@link DashShutdownHook})
|
||||
* </p>
|
||||
*
|
||||
* @param args The arguments of the application
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
LOG.info("Starting MCDash Wrapper v{} on port {}", config.getVersion(), SERVER_PORT);
|
||||
createDataFolder();
|
||||
serverManager.initialize();
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(new DashShutdownHook());
|
||||
|
||||
try {
|
||||
server = HttpServer.create(new InetSocketAddress(SERVER_PORT), 0);
|
||||
server.setExecutor(Executors.newCachedThreadPool());
|
||||
server.createContext("/", new StaticHandler());
|
||||
registerRoutes();
|
||||
server.start();
|
||||
} catch (IOException e) {
|
||||
LOG.error("An error occurred while starting the server: {}", e.getMessage());
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
serverManager.startServers();
|
||||
|
||||
LOG.info("MCDash Wrapper v{} is now running on port {}", config.getVersion(), SERVER_PORT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the data folder
|
||||
*/
|
||||
public static void createDataFolder() {
|
||||
if (DATA_FOLDER.exists()) return;
|
||||
|
||||
if (DATA_FOLDER.mkdirs()) {
|
||||
LOG.info("The data folder has been created");
|
||||
} else {
|
||||
LOG.error("An error occurred while creating the data folder");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a data source by its name
|
||||
*
|
||||
* @param name The name of the data source
|
||||
* @return the data source
|
||||
*/
|
||||
public static File getDataSource(String name) {
|
||||
return new File(DATA_FOLDER, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the route package
|
||||
*
|
||||
* @return the name of the route package
|
||||
*/
|
||||
public static String getRoutePackageName() {
|
||||
return MCDashWrapper.class.getPackage().getName() + ".routes";
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers all routes in the {@link de.gnmyt.mcdash.routes} package
|
||||
*/
|
||||
private static void registerRoutes() {
|
||||
Reflections reflections = new Reflections(getRoutePackageName());
|
||||
reflections.getSubTypesOf(DefaultHandler.class).forEach(clazz -> {
|
||||
try {
|
||||
clazz.getDeclaredConstructor().newInstance().register();
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the http server
|
||||
*
|
||||
* @return the http server
|
||||
*/
|
||||
public static HttpServer getHttpServer() {
|
||||
return server;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the configuration manager
|
||||
*
|
||||
* @return the configuration manager
|
||||
*/
|
||||
public static ConfigurationManager getConfig() {
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the data folder
|
||||
*
|
||||
* @return the data folder
|
||||
*/
|
||||
public static File getDataFolder() {
|
||||
return DATA_FOLDER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the server manager
|
||||
*
|
||||
* @return the server manager
|
||||
*/
|
||||
public static ServerManager getServerManager() {
|
||||
return serverManager;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user