Change RunMode and DebugMode to enums

This commit is contained in:
Melledy 2022-04-30 22:52:09 -07:00
parent eac82f3c01
commit 10bfb6976d
8 changed files with 36 additions and 27 deletions

View File

@ -1,5 +1,7 @@
package emu.grasscutter; package emu.grasscutter;
import emu.grasscutter.Grasscutter.ServerDebugMode;
import emu.grasscutter.Grasscutter.ServerRunMode;
import emu.grasscutter.game.mail.Mail; import emu.grasscutter.game.mail.Mail;
public final class Config { public final class Config {
@ -15,8 +17,8 @@ public final class Config {
public String SCRIPTS_FOLDER = "./resources/Scripts/"; public String SCRIPTS_FOLDER = "./resources/Scripts/";
public String PLUGINS_FOLDER = "./plugins/"; public String PLUGINS_FOLDER = "./plugins/";
public String DebugMode = "NONE"; // ALL, MISSING, NONE public ServerDebugMode DebugMode = ServerDebugMode.NONE; // ALL, MISSING, NONE
public String RunMode = "HYBRID"; // HYBRID, DISPATCH_ONLY, GAME_ONLY public ServerRunMode RunMode = ServerRunMode.HYBRID; // HYBRID, DISPATCH_ONLY, GAME_ONLY
public GameServerOptions GameServer = new GameServerOptions(); public GameServerOptions GameServer = new GameServerOptions();
public DispatchServerOptions DispatchServer = new DispatchServerOptions(); public DispatchServerOptions DispatchServer = new DispatchServerOptions();

View File

@ -35,7 +35,6 @@ public final class Grasscutter {
private static int day; // Current day of week private static int day; // Current day of week
public static RunMode MODE = RunMode.BOTH;
private static DispatchServer dispatchServer; private static DispatchServer dispatchServer;
private static GameServer gameServer; private static GameServer gameServer;
private static PluginManager pluginManager; private static PluginManager pluginManager;
@ -58,8 +57,6 @@ public final class Grasscutter {
for (String arg : args) { for (String arg : args) {
switch (arg.toLowerCase()) { switch (arg.toLowerCase()) {
case "-auth" -> MODE = RunMode.AUTH;
case "-game" -> MODE = RunMode.GAME;
case "-handbook" -> { case "-handbook" -> {
Tools.createGmHandbook(); return; Tools.createGmHandbook(); return;
} }
@ -85,12 +82,12 @@ public final class Grasscutter {
gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port)); gameServer = new GameServer(new InetSocketAddress(getConfig().getGameServerOptions().Ip, getConfig().getGameServerOptions().Port));
// Start servers. // Start servers.
if(getConfig().RunMode.equalsIgnoreCase("HYBRID")) { if (getConfig().RunMode == ServerRunMode.HYBRID) {
dispatchServer.start(); dispatchServer.start();
gameServer.start(); gameServer.start();
} else if (getConfig().RunMode.equalsIgnoreCase("DISPATCH_ONLY")) { } else if (getConfig().RunMode == ServerRunMode.DISPATCH_ONLY) {
dispatchServer.start(); dispatchServer.start();
} else if (getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { } else if (getConfig().RunMode == ServerRunMode.GAME_ONLY) {
gameServer.start(); gameServer.start();
} else { } else {
getLogger().error("Invalid server run mode. " + getConfig().RunMode); 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))) { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
while ((input = br.readLine()) != null) { while ((input = br.readLine()) != null) {
try { try {
if(getConfig().RunMode.equalsIgnoreCase("DISPATCH_ONLY")) { if (getConfig().RunMode == ServerRunMode.DISPATCH_ONLY) {
getLogger().error("Commands are not supported in dispatch only mode."); getLogger().error("Commands are not supported in dispatch only mode.");
return; return;
} }
@ -154,12 +151,6 @@ public final class Grasscutter {
Grasscutter.getLogger().error("An error occurred.", e); Grasscutter.getLogger().error("An error occurred.", e);
} }
} }
public enum RunMode {
BOTH,
AUTH,
GAME
}
public static Config getConfig() { public static Config getConfig() {
return config; return config;
@ -193,4 +184,12 @@ public final class Grasscutter {
public static int getCurrentDayOfWeek() { public static int getCurrentDayOfWeek() {
return day; return day;
} }
public enum ServerRunMode {
HYBRID, DISPATCH_ONLY, GAME_ONLY
}
public enum ServerDebugMode {
ALL, MISSING, NONE
}
} }

View File

@ -12,6 +12,7 @@ import dev.morphia.Morphia;
import dev.morphia.mapping.MapperOptions; import dev.morphia.mapping.MapperOptions;
import dev.morphia.query.experimental.filters.Filters; import dev.morphia.query.experimental.filters.Filters;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerRunMode;
import emu.grasscutter.game.Account; import emu.grasscutter.game.Account;
import emu.grasscutter.game.avatar.Avatar; import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.friends.Friendship; 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. // Yes. I very dislike this method. However, this will be good for now.
// TODO: Add dispatch routes for player account management // TODO: Add dispatch routes for player account management
public static Datastore getAccountDatastore() { public static Datastore getAccountDatastore() {
if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { if(Grasscutter.getConfig().RunMode == ServerRunMode.GAME_ONLY) {
return dispatchDatastore; return dispatchDatastore;
} else { } else {
return datastore; 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); dispatchMongoClient = MongoClients.create(Grasscutter.getConfig().getGameServerOptions().DispatchServerDatabaseUrl);
dispatchDatastore = Morphia.createDatastore(dispatchMongoClient, Grasscutter.getConfig().getGameServerOptions().DispatchServerDatabaseCollection); dispatchDatastore = Morphia.createDatastore(dispatchMongoClient, Grasscutter.getConfig().getGameServerOptions().DispatchServerDatabaseCollection);

View File

@ -8,6 +8,7 @@ import java.util.Collections;
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 emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerDebugMode;
import express.http.HttpContextHandler; import express.http.HttpContextHandler;
import express.http.Request; import express.http.Request;
import express.http.Response; import express.http.Response;
@ -34,8 +35,8 @@ public final class DispatchHttpJsonHandler implements HttpContextHandler {
@Override @Override
public void handle(Request req, Response res) throws IOException { public void handle(Request req, Response res) throws IOException {
// Checking for ALL here isn't required as when ALL is enabled enableDevLogging() gets enabled // 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())) { 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.equalsIgnoreCase("MISSING") ? "(MISSING)" : "")); 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); res.send(response);
} }

View File

@ -6,6 +6,8 @@ import com.google.protobuf.ByteString;
import emu.grasscutter.Config; import emu.grasscutter.Config;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerDebugMode;
import emu.grasscutter.Grasscutter.ServerRunMode;
import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.Account; import emu.grasscutter.game.Account;
import emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp; import emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp;
@ -62,7 +64,7 @@ public final class DispatchServer {
public QueryCurrRegionHttpRsp getCurrRegion() { public QueryCurrRegionHttpRsp getCurrRegion() {
// Needs to be fixed by having the game servers connect to the dispatch server. // 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; return regions.get(defaultServerName).parsedRegionQuery;
} }
@ -98,7 +100,7 @@ public final class DispatchServer {
List<RegionSimpleInfo> servers = new ArrayList<>(); List<RegionSimpleInfo> servers = new ArrayList<>();
List<String> usedNames = new ArrayList<>(); // List to check for potential naming conflicts List<String> 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 // hybrid mode
RegionSimpleInfo server = RegionSimpleInfo.newBuilder() RegionSimpleInfo server = RegionSimpleInfo.newBuilder()
.setName("os_usa") .setName("os_usa")
@ -233,7 +235,7 @@ public final class DispatchServer {
}); });
config.enforceSsl = Grasscutter.getConfig().getDispatchOptions().UseSSL; config.enforceSsl = Grasscutter.getConfig().getDispatchOptions().UseSSL;
if(Grasscutter.getConfig().DebugMode.equalsIgnoreCase("ALL")) { if(Grasscutter.getConfig().DebugMode == ServerDebugMode.ALL) {
config.enableDevLogging(); config.enableDevLogging();
} }
}); });
@ -241,7 +243,7 @@ public final class DispatchServer {
httpServer.get("/", (req, res) -> res.send("Welcome to Grasscutter")); httpServer.get("/", (req, res) -> res.send("Welcome to Grasscutter"));
httpServer.raw().error(404, ctx -> { 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())); Grasscutter.getLogger().info(String.format("[Dispatch] Potential unhandled %s request: %s", ctx.method(), ctx.url()));
} }
ctx.contentType("text/html"); ctx.contentType("text/html");

View File

@ -6,6 +6,7 @@ import emu.grasscutter.server.event.game.ReceivePacketEvent;
import org.reflections.Reflections; import org.reflections.Reflections;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerDebugMode;
import emu.grasscutter.net.packet.Opcodes; import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
@ -88,7 +89,7 @@ public class GameServerPacketHandler {
} }
// Log unhandled packets // 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)); Grasscutter.getLogger().info("Unhandled packet (" + opcode + "): " + emu.grasscutter.net.packet.PacketOpcodesUtil.getOpcodeName(opcode));
} }
} }

View File

@ -7,6 +7,7 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerDebugMode;
import emu.grasscutter.game.Account; import emu.grasscutter.game.Account;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.BasePacket;
@ -163,7 +164,7 @@ public class GameSession extends KcpChannel {
} }
// Log // Log
if (Grasscutter.getConfig().DebugMode.equalsIgnoreCase("ALL")) { if (Grasscutter.getConfig().DebugMode == ServerDebugMode.ALL) {
logPacket(packet); logPacket(packet);
} }
@ -230,7 +231,7 @@ public class GameSession extends KcpChannel {
} }
// Log packet // Log packet
if (Grasscutter.getConfig().DebugMode.equalsIgnoreCase("ALL")) { if (Grasscutter.getConfig().DebugMode == ServerDebugMode.ALL) {
if (!loopPacket.contains(opcode)) { if (!loopPacket.contains(opcode)) {
Grasscutter.getLogger().info("RECV: " + PacketOpcodesUtil.getOpcodeName(opcode) + " (" + opcode + ")"); Grasscutter.getLogger().info("RECV: " + PacketOpcodesUtil.getOpcodeName(opcode) + " (" + opcode + ")");
System.out.println(Utils.bytesToHex(payload)); System.out.println(Utils.bytesToHex(payload));

View File

@ -2,6 +2,8 @@ package emu.grasscutter.server.packet.send;
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import emu.grasscutter.Grasscutter; 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.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp; import emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp;
@ -25,7 +27,7 @@ public class PacketPlayerLoginRsp extends BasePacket {
RegionInfo info; RegionInfo info;
if(Grasscutter.getConfig().RunMode.equalsIgnoreCase("GAME_ONLY")) { if (Grasscutter.getConfig().RunMode == ServerRunMode.GAME_ONLY) {
if (regionCache == null) { if (regionCache == null) {
try { try {
File file = new File(Grasscutter.getConfig().DATA_FOLDER + "query_cur_region.txt"); File file = new File(Grasscutter.getConfig().DATA_FOLDER + "query_cur_region.txt");