From ce9953ceca2c3a68eaef2841136cd48fd5441cbf Mon Sep 17 00:00:00 2001 From: yunochan <97618198+yunochan@users.noreply.github.com> Date: Sat, 22 Jun 2024 22:24:03 +0800 Subject: [PATCH] add http status request and display html (#86) * add http status request * add maxplayer value * add http status request * add http status request * maxPlayers limit * maxPlayers limit --- src/main/java/emu/lunarcore/Config.java | 2 +- .../emu/lunarcore/server/http/HttpServer.java | 5 ++-- .../http/handlers/StatusServerHandler.java | 26 +++++++++++++++++++ .../recv/HandlerPlayerGetTokenCsReq.java | 8 ++++++ 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/main/java/emu/lunarcore/server/http/handlers/StatusServerHandler.java diff --git a/src/main/java/emu/lunarcore/Config.java b/src/main/java/emu/lunarcore/Config.java index 75cbdb7..7327ea4 100644 --- a/src/main/java/emu/lunarcore/Config.java +++ b/src/main/java/emu/lunarcore/Config.java @@ -131,7 +131,7 @@ public class Config { public boolean autoUpgradeWorldLevel = true; // Automatically upgrades world level when the player reaches a certain TB level public String language = "EN"; public Set defaultPermissions = Set.of("*"); - + public int maxPlayers = -1; public ServerProfile serverFriendInfo = new ServerProfile(); public WelcomeMail welcomeMail = new WelcomeMail(); diff --git a/src/main/java/emu/lunarcore/server/http/HttpServer.java b/src/main/java/emu/lunarcore/server/http/HttpServer.java index 9fb6e89..3f93ccf 100644 --- a/src/main/java/emu/lunarcore/server/http/HttpServer.java +++ b/src/main/java/emu/lunarcore/server/http/HttpServer.java @@ -135,6 +135,7 @@ public class HttpServer { // Fallback handler getApp().error(404, this::notFoundHandler); + getApp().get("/status/server", new StatusServerHandler()::handle); } private void addDispatchRoutes() { @@ -199,9 +200,9 @@ public class HttpServer { this.modes.add("GATESERVER"); } - private void notFoundHandler(Context ctx) { + private void notFoundHandler(Context ctx) { ctx.status(404); ctx.contentType(ContentType.TEXT_PLAIN); ctx.result("not found"); } -} +} \ No newline at end of file diff --git a/src/main/java/emu/lunarcore/server/http/handlers/StatusServerHandler.java b/src/main/java/emu/lunarcore/server/http/handlers/StatusServerHandler.java new file mode 100644 index 0000000..96387cf --- /dev/null +++ b/src/main/java/emu/lunarcore/server/http/handlers/StatusServerHandler.java @@ -0,0 +1,26 @@ +package emu.lunarcore.server.http.handlers; + +import org.jetbrains.annotations.NotNull; + +import emu.lunarcore.GameConstants; +import emu.lunarcore.LunarCore; + +import io.javalin.http.Context; +import io.javalin.http.Handler; + +public class StatusServerHandler implements Handler { + + @Override + public void handle(@NotNull Context ctx) throws Exception { + int playerCount = LunarCore.getGameServer().getPlayerCount(); + int maxPlayers = LunarCore.getConfig().getServerOptions().maxPlayers; + String version = GameConstants.VERSION; + String responseJson = String.format( + "{\"retcode\":0,\"status\":{\"playerCount\":%d,\"maxPlayers\":%d,\"version\":\"%s\"}}", + playerCount, maxPlayers, version + ); + ctx.status(200); + ctx.contentType("application/json"); + ctx.result(responseJson); + } +} diff --git a/src/main/java/emu/lunarcore/server/packet/recv/HandlerPlayerGetTokenCsReq.java b/src/main/java/emu/lunarcore/server/packet/recv/HandlerPlayerGetTokenCsReq.java index ea47fc4..22e8d56 100644 --- a/src/main/java/emu/lunarcore/server/packet/recv/HandlerPlayerGetTokenCsReq.java +++ b/src/main/java/emu/lunarcore/server/packet/recv/HandlerPlayerGetTokenCsReq.java @@ -28,6 +28,14 @@ public class HandlerPlayerGetTokenCsReq extends PacketHandler { // Set account object for session session.setAccount(account); + // If playerCount reach the set maxPlayers, newly logged-in players will be kicked out + int maxPlayers = LunarCore.getConfig().getServerOptions().maxPlayers; + int playerCount = LunarCore.getGameServer().getPlayerCount(); + if (maxPlayers > -1 && playerCount >= maxPlayers) { + session.close(); + return; + } + // Get player from database, if it doesnt exist, we create it Player player = LunarCore.getGameDatabase().getObjectByField(Player.class, "accountUid", account.getUid());