diff --git a/src/main/java/emu/grasscutter/Config.java b/src/main/java/emu/grasscutter/Config.java index bc691dbd9..5a49c325c 100644 --- a/src/main/java/emu/grasscutter/Config.java +++ b/src/main/java/emu/grasscutter/Config.java @@ -1,5 +1,7 @@ package emu.grasscutter; +import emu.grasscutter.Grasscutter.ServerDebugMode; +import emu.grasscutter.Grasscutter.ServerRunMode; import emu.grasscutter.game.mail.Mail; public final class Config { @@ -15,8 +17,8 @@ public final class Config { public String SCRIPTS_FOLDER = "./resources/Scripts/"; public String PLUGINS_FOLDER = "./plugins/"; - public String DebugMode = "NONE"; // ALL, MISSING, NONE - public String RunMode = "HYBRID"; // HYBRID, DISPATCH_ONLY, GAME_ONLY + public ServerDebugMode DebugMode = ServerDebugMode.NONE; // ALL, MISSING, NONE + public ServerRunMode RunMode = ServerRunMode.HYBRID; // HYBRID, DISPATCH_ONLY, GAME_ONLY public GameServerOptions GameServer = new GameServerOptions(); public DispatchServerOptions DispatchServer = new DispatchServerOptions(); diff --git a/src/main/java/emu/grasscutter/Grasscutter.java b/src/main/java/emu/grasscutter/Grasscutter.java index 60d042b11..c7ab7c637 100644 --- a/src/main/java/emu/grasscutter/Grasscutter.java +++ b/src/main/java/emu/grasscutter/Grasscutter.java @@ -35,7 +35,6 @@ public final class Grasscutter { private static int day; // Current day of week - public static RunMode MODE = RunMode.BOTH; private static DispatchServer dispatchServer; private static GameServer gameServer; private static PluginManager pluginManager; @@ -58,8 +57,6 @@ public final class Grasscutter { for (String arg : args) { switch (arg.toLowerCase()) { - case "-auth" -> MODE = RunMode.AUTH; - case "-game" -> MODE = RunMode.GAME; case "-handbook" -> { Tools.createGmHandbook(); return; } @@ -85,12 +82,12 @@ public final class Grasscutter { gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port)); // Start servers. - if(getConfig().RunMode.equalsIgnoreCase("HYBRID")) { + if (getConfig().RunMode == ServerRunMode.HYBRID) { dispatchServer.start(); gameServer.start(); - } else if (getConfig().RunMode.equalsIgnoreCase("DISPATCH_ONLY")) { + } else if (getConfig().RunMode == ServerRunMode.DISPATCH_ONLY) { dispatchServer.start(); - } else if (getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { + } else if (getConfig().RunMode == ServerRunMode.GAME_ONLY) { gameServer.start(); } else { getLogger().error("Invalid server run mode. " + getConfig().RunMode); @@ -140,7 +137,7 @@ public final class Grasscutter { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { while ((input = br.readLine()) != null) { try { - if(getConfig().RunMode.equalsIgnoreCase("DISPATCH_ONLY")) { + if (getConfig().RunMode == ServerRunMode.DISPATCH_ONLY) { getLogger().error("Commands are not supported in dispatch only mode."); return; } @@ -154,12 +151,6 @@ public final class Grasscutter { Grasscutter.getLogger().error("An error occurred.", e); } } - - public enum RunMode { - BOTH, - AUTH, - GAME - } public static Config getConfig() { return config; @@ -193,4 +184,12 @@ public final class Grasscutter { public static int getCurrentDayOfWeek() { return day; } + + public enum ServerRunMode { + HYBRID, DISPATCH_ONLY, GAME_ONLY + } + + public enum ServerDebugMode { + ALL, MISSING, NONE + } } diff --git a/src/main/java/emu/grasscutter/database/DatabaseManager.java b/src/main/java/emu/grasscutter/database/DatabaseManager.java index 68e1f5e87..c6a5f329a 100644 --- a/src/main/java/emu/grasscutter/database/DatabaseManager.java +++ b/src/main/java/emu/grasscutter/database/DatabaseManager.java @@ -12,6 +12,7 @@ import dev.morphia.Morphia; import dev.morphia.mapping.MapperOptions; import dev.morphia.query.experimental.filters.Filters; import emu.grasscutter.Grasscutter; +import emu.grasscutter.Grasscutter.ServerRunMode; import emu.grasscutter.game.Account; import emu.grasscutter.game.avatar.Avatar; import emu.grasscutter.game.friends.Friendship; @@ -41,7 +42,7 @@ public final class DatabaseManager { // Yes. I very dislike this method. However, this will be good for now. // TODO: Add dispatch routes for player account management public static Datastore getAccountDatastore() { - if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { + if(Grasscutter.getConfig().RunMode == ServerRunMode.GAME_ONLY) { return dispatchDatastore; } else { return datastore; @@ -77,7 +78,7 @@ public final class DatabaseManager { } } - if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { + if(Grasscutter.getConfig().RunMode == ServerRunMode.GAME_ONLY) { dispatchMongoClient = MongoClients.create(Grasscutter.getConfig().getGameServerOptions().DispatchServerDatabaseUrl); dispatchDatastore = Morphia.createDatastore(dispatchMongoClient, Grasscutter.getConfig().getGameServerOptions().DispatchServerDatabaseCollection); diff --git a/src/main/java/emu/grasscutter/server/dispatch/DispatchHttpJsonHandler.java b/src/main/java/emu/grasscutter/server/dispatch/DispatchHttpJsonHandler.java index 80e582b5f..31abc77ae 100644 --- a/src/main/java/emu/grasscutter/server/dispatch/DispatchHttpJsonHandler.java +++ b/src/main/java/emu/grasscutter/server/dispatch/DispatchHttpJsonHandler.java @@ -8,6 +8,7 @@ import java.util.Collections; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import emu.grasscutter.Grasscutter; +import emu.grasscutter.Grasscutter.ServerDebugMode; import express.http.HttpContextHandler; import express.http.Request; import express.http.Response; @@ -34,8 +35,8 @@ public final class DispatchHttpJsonHandler implements HttpContextHandler { @Override public void handle(Request req, Response res) throws IOException { // Checking for ALL here isn't required as when ALL is enabled enableDevLogging() gets enabled - if(Grasscutter.getConfig().DebugMode.equalsIgnoreCase("MISSING") && Arrays.stream(missingRoutes).anyMatch(x -> x == req.baseUrl())) { - Grasscutter.getLogger().info(String.format("[Dispatch] Client %s %s request: ", req.ip(), req.method(), req.baseUrl()) + (Grasscutter.getConfig().DebugMode.equalsIgnoreCase("MISSING") ? "(MISSING)" : "")); + if(Grasscutter.getConfig().DebugMode == ServerDebugMode.MISSING && Arrays.stream(missingRoutes).anyMatch(x -> x == req.baseUrl())) { + Grasscutter.getLogger().info(String.format("[Dispatch] Client %s %s request: ", req.ip(), req.method(), req.baseUrl()) + (Grasscutter.getConfig().DebugMode == ServerDebugMode.MISSING ? "(MISSING)" : "")); } res.send(response); } diff --git a/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java b/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java index 65ded023e..9fc85b477 100644 --- a/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java +++ b/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java @@ -6,6 +6,8 @@ import com.google.protobuf.ByteString; import emu.grasscutter.Config; import emu.grasscutter.Grasscutter; +import emu.grasscutter.Grasscutter.ServerDebugMode; +import emu.grasscutter.Grasscutter.ServerRunMode; import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.game.Account; import emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp; @@ -62,7 +64,7 @@ public final class DispatchServer { public QueryCurrRegionHttpRsp getCurrRegion() { // Needs to be fixed by having the game servers connect to the dispatch server. - if (Grasscutter.getConfig().RunMode.equalsIgnoreCase("HYBRID")) { + if (Grasscutter.getConfig().RunMode == ServerRunMode.HYBRID) { return regions.get(defaultServerName).parsedRegionQuery; } @@ -98,7 +100,7 @@ public final class DispatchServer { List servers = new ArrayList<>(); List usedNames = new ArrayList<>(); // List to check for potential naming conflicts - if (Grasscutter.getConfig().RunMode.equalsIgnoreCase("HYBRID")) { // Automatically add the game server if in + if (Grasscutter.getConfig().RunMode == ServerRunMode.HYBRID) { // Automatically add the game server if in // hybrid mode RegionSimpleInfo server = RegionSimpleInfo.newBuilder() .setName("os_usa") @@ -233,7 +235,7 @@ public final class DispatchServer { }); config.enforceSsl = Grasscutter.getConfig().getDispatchOptions().UseSSL; - if(Grasscutter.getConfig().DebugMode.equalsIgnoreCase("ALL")) { + if(Grasscutter.getConfig().DebugMode == ServerDebugMode.ALL) { config.enableDevLogging(); } }); @@ -241,7 +243,7 @@ public final class DispatchServer { httpServer.get("/", (req, res) -> res.send("Welcome to Grasscutter")); httpServer.raw().error(404, ctx -> { - if(Grasscutter.getConfig().DebugMode.equalsIgnoreCase("MISSING")) { + if(Grasscutter.getConfig().DebugMode == ServerDebugMode.MISSING) { Grasscutter.getLogger().info(String.format("[Dispatch] Potential unhandled %s request: %s", ctx.method(), ctx.url())); } ctx.contentType("text/html"); diff --git a/src/main/java/emu/grasscutter/server/game/GameServerPacketHandler.java b/src/main/java/emu/grasscutter/server/game/GameServerPacketHandler.java index 006d4621f..89fa71481 100644 --- a/src/main/java/emu/grasscutter/server/game/GameServerPacketHandler.java +++ b/src/main/java/emu/grasscutter/server/game/GameServerPacketHandler.java @@ -6,6 +6,7 @@ import emu.grasscutter.server.event.game.ReceivePacketEvent; import org.reflections.Reflections; import emu.grasscutter.Grasscutter; +import emu.grasscutter.Grasscutter.ServerDebugMode; import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketOpcodes; @@ -88,7 +89,7 @@ public class GameServerPacketHandler { } // Log unhandled packets - if (Grasscutter.getConfig().DebugMode.equalsIgnoreCase("MISSING")) { + if (Grasscutter.getConfig().DebugMode == ServerDebugMode.MISSING) { Grasscutter.getLogger().info("Unhandled packet (" + opcode + "): " + emu.grasscutter.net.packet.PacketOpcodesUtil.getOpcodeName(opcode)); } } diff --git a/src/main/java/emu/grasscutter/server/game/GameSession.java b/src/main/java/emu/grasscutter/server/game/GameSession.java index a980a377c..1ae5067ea 100644 --- a/src/main/java/emu/grasscutter/server/game/GameSession.java +++ b/src/main/java/emu/grasscutter/server/game/GameSession.java @@ -7,6 +7,7 @@ import java.util.HashSet; import java.util.Set; import emu.grasscutter.Grasscutter; +import emu.grasscutter.Grasscutter.ServerDebugMode; import emu.grasscutter.game.Account; import emu.grasscutter.game.player.Player; import emu.grasscutter.net.packet.BasePacket; @@ -163,7 +164,7 @@ public class GameSession extends KcpChannel { } // Log - if (Grasscutter.getConfig().DebugMode.equalsIgnoreCase("ALL")) { + if (Grasscutter.getConfig().DebugMode == ServerDebugMode.ALL) { logPacket(packet); } @@ -230,7 +231,7 @@ public class GameSession extends KcpChannel { } // Log packet - if (Grasscutter.getConfig().DebugMode.equalsIgnoreCase("ALL")) { + if (Grasscutter.getConfig().DebugMode == ServerDebugMode.ALL) { if (!loopPacket.contains(opcode)) { Grasscutter.getLogger().info("RECV: " + PacketOpcodesUtil.getOpcodeName(opcode) + " (" + opcode + ")"); System.out.println(Utils.bytesToHex(payload)); diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerLoginRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerLoginRsp.java index 18ff6c03e..6407e9412 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerLoginRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketPlayerLoginRsp.java @@ -2,6 +2,8 @@ package emu.grasscutter.server.packet.send; import com.google.protobuf.ByteString; import emu.grasscutter.Grasscutter; +import emu.grasscutter.Grasscutter.ServerDebugMode; +import emu.grasscutter.Grasscutter.ServerRunMode; import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp; @@ -25,7 +27,7 @@ public class PacketPlayerLoginRsp extends BasePacket { RegionInfo info; - if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { + if (Grasscutter.getConfig().RunMode == ServerRunMode.GAME_ONLY) { if (regionCache == null) { try { File file = new File(Grasscutter.getConfig().DATA_FOLDER + "query_cur_region.txt");