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;
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
@@ -110,6 +120,10 @@ public class LunarCore {
return log;
}
public static LineReaderImpl getLineReader() {
return reader;
}
// Database
private static void initDatabases() {
@@ -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) {

View File

@@ -48,6 +48,7 @@ public class ResourceLoader {
// Done
loaded = true;
LunarCore.getLogger().info("Resource loading complete");
}
private static List<Class<?>> 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");
}
}

View File

@@ -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);
public DatabaseManager() {
private final DeleteOptions DELETE_MANY = new DeleteOptions().multi(true);
}
// Empty constructor for when we want to start an internal server
public DatabaseManager() {}
public DatabaseManager(DatabaseInfo info, ServerType type) {
// Variables

View File

@@ -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() {

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