Improve server console so input does not clip through output

This commit is contained in:
Melledy
2023-11-03 12:50:30 -07:00
parent adfd690a4a
commit 4e95c717dd
6 changed files with 61 additions and 22 deletions

View File

@@ -23,7 +23,8 @@ import emu.lunarcore.util.JsonUtils;
import lombok.Getter; import lombok.Getter;
public class LunarCore { 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 File configFile = new File("./config.json");
private static Config config; private static Config config;
@@ -34,17 +35,26 @@ public class LunarCore {
@Getter private static GameServer gameServer; @Getter private static GameServer gameServer;
@Getter private static CommandManager commandManager; @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 { 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(); LunarCore.loadConfig();
} }
public static void main(String[] args) { public static void main(String[] args) {
// Start Server // Start Server
LunarCore.getLogger().info("Starting Lunar Core..."); LunarCore.getLogger().info("Starting Lunar Core...");
LunarCore.getLogger().info("Made for game version " + GameConstants.VERSION);
boolean generateHandbook = true; boolean generateHandbook = true;
// Load commands // Load commands
@@ -109,6 +119,10 @@ public class LunarCore {
public static Logger getLogger() { public static Logger getLogger() {
return log; return log;
} }
public static LineReaderImpl getLineReader() {
return reader;
}
// Database // Database
@@ -154,10 +168,6 @@ public class LunarCore {
private static void startConsole() { private static void startConsole() {
try { try {
LineReaderImpl reader = (LineReaderImpl) LineReaderBuilder.builder()
.terminal(TerminalBuilder.terminal())
.build();
while (true) { while (true) {
String input = reader.readLine("> "); String input = reader.readLine("> ");
if (input == null || input.length() == 0) { if (input == null || input.length() == 0) {

View File

@@ -48,6 +48,7 @@ public class ResourceLoader {
// Done // Done
loaded = true; loaded = true;
LunarCore.getLogger().info("Resource loading complete");
} }
private static List<Class<?>> getResourceDefClasses() { private static List<Class<?>> getResourceDefClasses() {
@@ -166,6 +167,9 @@ public class ResourceLoader {
// Might be better to cache // Might be better to cache
private static void loadFloorInfos() { private static void loadFloorInfos() {
//
LunarCore.getLogger().info("Loading floor infos... this may take a while.");
// Load floor infos // Load floor infos
File floorDir = new File(LunarCore.getConfig().getResourceDir() + "/Config/LevelOutput/Floor/"); File floorDir = new File(LunarCore.getConfig().getResourceDir() + "/Config/LevelOutput/Floor/");
@@ -209,7 +213,7 @@ public class ResourceLoader {
} }
// Done // Done
LunarCore.getLogger().info("Loaded " + GameData.getFloorInfos().size() + " FloorInfos."); LunarCore.getLogger().info("Loaded " + GameData.getFloorInfos().size() + " floor infos.");
} }
// Might be better to cache // Might be better to cache
@@ -249,8 +253,5 @@ public class ResourceLoader {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
// Done
LunarCore.getLogger().info("Loaded rogue maps");
} }
} }

View File

@@ -30,11 +30,11 @@ import emu.lunarcore.LunarCore.ServerType;
public final class DatabaseManager { public final class DatabaseManager {
private MongoServer server; private MongoServer server;
private Datastore datastore; 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) { public DatabaseManager(DatabaseInfo info, ServerType type) {
// Variables // Variables

View File

@@ -169,7 +169,7 @@ public class GameSession {
public void logPacket(String sendOrRecv, int opcode, byte[] payload) { public void logPacket(String sendOrRecv, int opcode, byte[] payload) {
LunarCore.getLogger().info(sendOrRecv + ": " + CmdIdUtils.getOpcodeName(opcode) + " (" + opcode + ")"); LunarCore.getLogger().info(sendOrRecv + ": " + CmdIdUtils.getOpcodeName(opcode) + " (" + opcode + ")");
System.out.println(Utils.bytesToHex(payload)); LunarCore.getLineReader().printAbove(Utils.bytesToHex(payload));
} }
public void close() { public void close() {

View File

@@ -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<ILoggingEvent> {
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));
}
}

View File

@@ -1,9 +1,6 @@
<Configuration> <Configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <appender name="CONSOLE" class="emu.lunarcore.util.LunarConsoleAppender">
<encoder>
<pattern>[%d{HH:mm:ss}] [%level] %msg%n</pattern>
</encoder>
</appender> </appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -22,7 +19,7 @@
<logger name="de.bwaldvogel" level="ERROR" /> <logger name="de.bwaldvogel" level="ERROR" />
<logger name="io.javalin" level="ERROR" /> <logger name="io.javalin" level="ERROR" />
<root level="INFO"> <root level="INFO">
<appender-ref ref="STDOUT" /> <appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" /> <appender-ref ref="FILE" />
</root> </root>
</Configuration> </Configuration>