From 4e95c717ddf0b0b28a0d0c3ec8bc0088880c17aa Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:50:30 -0700 Subject: [PATCH] Improve server console so input does not clip through output --- src/main/java/emu/lunarcore/LunarCore.java | 26 +++++++++++----- .../emu/lunarcore/data/ResourceLoader.java | 9 +++--- .../lunarcore/database/DatabaseManager.java | 8 ++--- .../lunarcore/server/game/GameSession.java | 2 +- .../lunarcore/util/LunarConsoleAppender.java | 31 +++++++++++++++++++ src/main/resources/logback.xml | 7 ++--- 6 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 src/main/java/emu/lunarcore/util/LunarConsoleAppender.java diff --git a/src/main/java/emu/lunarcore/LunarCore.java b/src/main/java/emu/lunarcore/LunarCore.java index f6cb355..ac7dff9 100644 --- a/src/main/java/emu/lunarcore/LunarCore.java +++ b/src/main/java/emu/lunarcore/LunarCore.java @@ -23,7 +23,8 @@ import emu.lunarcore.util.JsonUtils; import lombok.Getter; public class LunarCore { - private static Logger log = (Logger) LoggerFactory.getLogger(LunarCore.class); + private static final Logger log = (Logger) LoggerFactory.getLogger(LunarCore.class); + private static LineReaderImpl reader; private static File configFile = new File("./config.json"); private static Config config; @@ -34,17 +35,26 @@ public class LunarCore { @Getter private static GameServer gameServer; @Getter private static CommandManager commandManager; + @Getter private static ServerType serverType = ServerType.BOTH; - private static ServerType serverType = ServerType.BOTH; - - // Load config first before doing anything static { + // Setup console reader + try { + reader = (LineReaderImpl) LineReaderBuilder.builder() + .terminal(TerminalBuilder.builder().dumb(true).build()) + .build(); + } catch (IOException e) { + e.printStackTrace(); + } + + // Load config LunarCore.loadConfig(); } public static void main(String[] args) { // Start Server LunarCore.getLogger().info("Starting Lunar Core..."); + LunarCore.getLogger().info("Made for game version " + GameConstants.VERSION); boolean generateHandbook = true; // Load commands @@ -109,6 +119,10 @@ public class LunarCore { public static Logger getLogger() { return log; } + + public static LineReaderImpl getLineReader() { + return reader; + } // Database @@ -154,10 +168,6 @@ public class LunarCore { private static void startConsole() { try { - LineReaderImpl reader = (LineReaderImpl) LineReaderBuilder.builder() - .terminal(TerminalBuilder.terminal()) - .build(); - while (true) { String input = reader.readLine("> "); if (input == null || input.length() == 0) { diff --git a/src/main/java/emu/lunarcore/data/ResourceLoader.java b/src/main/java/emu/lunarcore/data/ResourceLoader.java index 9c31b19..ca4cffa 100644 --- a/src/main/java/emu/lunarcore/data/ResourceLoader.java +++ b/src/main/java/emu/lunarcore/data/ResourceLoader.java @@ -48,6 +48,7 @@ public class ResourceLoader { // Done loaded = true; + LunarCore.getLogger().info("Resource loading complete"); } private static List> getResourceDefClasses() { @@ -166,6 +167,9 @@ public class ResourceLoader { // Might be better to cache private static void loadFloorInfos() { + // + LunarCore.getLogger().info("Loading floor infos... this may take a while."); + // Load floor infos File floorDir = new File(LunarCore.getConfig().getResourceDir() + "/Config/LevelOutput/Floor/"); @@ -209,7 +213,7 @@ public class ResourceLoader { } // Done - LunarCore.getLogger().info("Loaded " + GameData.getFloorInfos().size() + " FloorInfos."); + LunarCore.getLogger().info("Loaded " + GameData.getFloorInfos().size() + " floor infos."); } // Might be better to cache @@ -249,8 +253,5 @@ public class ResourceLoader { } catch (Exception e) { e.printStackTrace(); } - - // Done - LunarCore.getLogger().info("Loaded rogue maps"); } } diff --git a/src/main/java/emu/lunarcore/database/DatabaseManager.java b/src/main/java/emu/lunarcore/database/DatabaseManager.java index 312fd48..5a3ec63 100644 --- a/src/main/java/emu/lunarcore/database/DatabaseManager.java +++ b/src/main/java/emu/lunarcore/database/DatabaseManager.java @@ -30,11 +30,11 @@ import emu.lunarcore.LunarCore.ServerType; public final class DatabaseManager { private MongoServer server; private Datastore datastore; - private DeleteOptions DELETE_MANY = new DeleteOptions().multi(true); + + private final DeleteOptions DELETE_MANY = new DeleteOptions().multi(true); - public DatabaseManager() { - - } + // Empty constructor for when we want to start an internal server + public DatabaseManager() {} public DatabaseManager(DatabaseInfo info, ServerType type) { // Variables diff --git a/src/main/java/emu/lunarcore/server/game/GameSession.java b/src/main/java/emu/lunarcore/server/game/GameSession.java index 49fadea..a96eba1 100644 --- a/src/main/java/emu/lunarcore/server/game/GameSession.java +++ b/src/main/java/emu/lunarcore/server/game/GameSession.java @@ -169,7 +169,7 @@ public class GameSession { public void logPacket(String sendOrRecv, int opcode, byte[] payload) { LunarCore.getLogger().info(sendOrRecv + ": " + CmdIdUtils.getOpcodeName(opcode) + " (" + opcode + ")"); - System.out.println(Utils.bytesToHex(payload)); + LunarCore.getLineReader().printAbove(Utils.bytesToHex(payload)); } public void close() { diff --git a/src/main/java/emu/lunarcore/util/LunarConsoleAppender.java b/src/main/java/emu/lunarcore/util/LunarConsoleAppender.java new file mode 100644 index 0000000..e1ac43d --- /dev/null +++ b/src/main/java/emu/lunarcore/util/LunarConsoleAppender.java @@ -0,0 +1,31 @@ +package emu.lunarcore.util; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.AppenderBase; +import ch.qos.logback.classic.PatternLayout; + +import emu.lunarcore.LunarCore; + +public class LunarConsoleAppender extends AppenderBase { + protected PatternLayout layout; + + @Override + public void start() { + this.layout = new PatternLayout(); + this.layout.setContext(context); + this.layout.setPattern("[%d{HH:mm:ss}] [%level] %msg%n"); + this.layout.start(); + super.start(); + } + + @Override + public void stop() { + super.stop(); + this.layout.stop(); + } + + @Override + protected void append(ILoggingEvent event) { + LunarCore.getLineReader().printAbove(layout.doLayout(event)); + } +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 462bc19..8e34752 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -1,9 +1,6 @@ - - - [%d{HH:mm:ss}] [%level] %msg%n - + @@ -22,7 +19,7 @@ - + \ No newline at end of file