Add database client as common for other components.
This commit is contained in:
parent
5e9485eb3e
commit
2fb98ef64c
6 changed files with 73 additions and 25 deletions
12
build.gradle
12
build.gradle
|
@ -42,6 +42,7 @@ dependencies {
|
||||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
|
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
|
||||||
|
|
||||||
annotationProcessor modImplementation("io.wispforest:owo-lib:${project.owo_version}")
|
annotationProcessor modImplementation("io.wispforest:owo-lib:${project.owo_version}")
|
||||||
|
include "io.wispforest:owo-sentinel:${project.owo_version}"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,5 +89,16 @@ publishing {
|
||||||
// Notice: This block does NOT have the same function as the block in the top level.
|
// Notice: This block does NOT have the same function as the block in the top level.
|
||||||
// The repositories here will be used for publishing your artifact, not for
|
// The repositories here will be used for publishing your artifact, not for
|
||||||
// retrieving dependencies.
|
// retrieving dependencies.
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: change to CT server once it's all ready
|
||||||
|
maven {
|
||||||
|
name = "AlexDevs"
|
||||||
|
url = "https://maven.alexdevs.me/releases"
|
||||||
|
credentials {
|
||||||
|
username = System.getenv("MAVEN_USERNAME")
|
||||||
|
password = System.getenv("MAVEN_PASSWORD")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,11 +9,11 @@ yarn_mappings=1.21+build.9
|
||||||
loader_version=0.15.11
|
loader_version=0.15.11
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version=1.2
|
mod_version=1.3
|
||||||
maven_group=ct.server
|
maven_group=ct
|
||||||
archives_base_name=ct-server
|
archives_base_name=ct-server
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
fabric_version=0.100.8+1.21
|
fabric_version=0.100.8+1.21
|
||||||
|
|
||||||
owo_version=0.12.8-alpha.7+1.21
|
owo_version=0.12.11+1.21
|
|
@ -1,23 +1,18 @@
|
||||||
package ct.server;
|
package ct.server;
|
||||||
|
|
||||||
|
import ct.server.database.DatabaseClient;
|
||||||
|
import ct.server.http.ServiceServer;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
|
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerEntityEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerEntityEvents;
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.networking.v1.ServerLoginConnectionEvents;
|
|
||||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.sql.SQLException;
|
||||||
import java.net.*;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
|
|
||||||
public class CtServer implements ModInitializer {
|
public class CtServer implements ModInitializer {
|
||||||
|
@ -30,17 +25,38 @@ public class CtServer implements ModInitializer {
|
||||||
private static float currentMspt = 0;
|
private static float currentMspt = 0;
|
||||||
private static int currentPlayerCount = 0;
|
private static int currentPlayerCount = 0;
|
||||||
|
|
||||||
private static CtServer INSTANCE;
|
|
||||||
|
|
||||||
public static CtServer getInstance() {
|
public static CtServer getInstance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
private static CtServer INSTANCE;
|
||||||
|
|
||||||
|
private ServiceServer serviceServer;
|
||||||
|
public ServiceServer serviceServer() {
|
||||||
|
return serviceServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DatabaseClient database;
|
||||||
|
public DatabaseClient database() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
INSTANCE = this;
|
INSTANCE = this;
|
||||||
|
|
||||||
LOGGER.info("Starting ct-client");
|
LOGGER.info("Starting ct-server");
|
||||||
|
|
||||||
|
try {
|
||||||
|
database = new DatabaseClient();
|
||||||
|
} catch(SQLException e) {
|
||||||
|
LOGGER.error("Could not connect to the database", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
serviceServer = new ServiceServer();
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOGGER.error("Unable to start HTTP server", e);
|
||||||
|
}
|
||||||
|
|
||||||
ServerTickEvents.END_SERVER_TICK.register(server -> {
|
ServerTickEvents.END_SERVER_TICK.register(server -> {
|
||||||
currentMspt = server.getAverageTickTime();
|
currentMspt = server.getAverageTickTime();
|
||||||
|
@ -58,12 +74,6 @@ public class CtServer implements ModInitializer {
|
||||||
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
|
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
|
||||||
currentPlayerCount = server.getCurrentPlayerCount() - 1;
|
currentPlayerCount = server.getCurrentPlayerCount() - 1;
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
|
||||||
var httpServer = new ServiceHttpServer();
|
|
||||||
} catch (IOException e) {
|
|
||||||
LOGGER.error("Unable to start HTTP server", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getTPS() {
|
public static float getTPS() {
|
||||||
|
|
|
@ -5,4 +5,5 @@ import io.wispforest.owo.config.annotation.Config;
|
||||||
@Config(name = "ct-server-config", wrapperName = "CtServerConfig")
|
@Config(name = "ct-server-config", wrapperName = "CtServerConfig")
|
||||||
public class CtServerConfigModel {
|
public class CtServerConfigModel {
|
||||||
public short httpPort = 25581;
|
public short httpPort = 25581;
|
||||||
|
public String databaseUrl = "jdbc:postgresql://127.0.0.1:5432/ct?user=myuser&password=mypassword";
|
||||||
}
|
}
|
||||||
|
|
21
src/main/java/ct/server/database/DatabaseClient.java
Normal file
21
src/main/java/ct/server/database/DatabaseClient.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package ct.server.database;
|
||||||
|
|
||||||
|
import ct.server.CtServer;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class DatabaseClient {
|
||||||
|
private Connection connection;
|
||||||
|
public Connection connection() throws SQLException {
|
||||||
|
if (connection == null || connection.isClosed()) {
|
||||||
|
connection = DriverManager.getConnection(CtServer.CONFIG.databaseUrl());
|
||||||
|
}
|
||||||
|
return connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare a connection to the DB ready for use
|
||||||
|
// TODO: Consider creating a pool
|
||||||
|
public DatabaseClient() throws SQLException {
|
||||||
|
connection();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,23 +1,27 @@
|
||||||
package ct.server;
|
package ct.server.http;
|
||||||
|
|
||||||
import com.sun.net.httpserver.HttpExchange;
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
import com.sun.net.httpserver.HttpHandler;
|
import com.sun.net.httpserver.HttpHandler;
|
||||||
import com.sun.net.httpserver.HttpServer;
|
import com.sun.net.httpserver.HttpServer;
|
||||||
|
import ct.server.CtServer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
public class ServiceHttpServer {
|
public class ServiceServer {
|
||||||
private HttpServer server;
|
private final HttpServer server;
|
||||||
|
public HttpServer httpServer() {
|
||||||
|
return this.server;
|
||||||
|
}
|
||||||
|
|
||||||
public ServiceHttpServer() throws IOException {
|
public ServiceServer() throws IOException {
|
||||||
server = HttpServer.create(new InetSocketAddress(CtServer.CONFIG.httpPort()), 0);
|
server = HttpServer.create(new InetSocketAddress(CtServer.CONFIG.httpPort()), 0);
|
||||||
server.createContext("/tps", new TPSHandler());
|
server.createContext("/tps", new TPSHandler());
|
||||||
server.createContext("/mspt", new MSPTHandler());
|
server.createContext("/mspt", new MSPTHandler());
|
||||||
server.createContext("/player", new PlayerCountHandler());
|
server.createContext("/player", new PlayerCountHandler());
|
||||||
server.setExecutor(null);
|
server.setExecutor(null);
|
||||||
|
|
||||||
var httpThread = new Thread(() -> server.start());
|
var httpThread = new Thread(server::start);
|
||||||
httpThread.start();
|
httpThread.start();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue