package launchserver.command.handler;
import java.io.IOException;
import jline.console.ConsoleReader;
import launcher.helper.LogHelper;
import launchserver.LaunchServer;
import org.fusesource.jansi.Ansi;
public final class JLineCommandHandler extends CommandHandler {
private final ConsoleReader reader;
public JLineCommandHandler(LaunchServer server) throws IOException {
super(server);
// Set reader
reader = new ConsoleReader();
reader.setExpandEvents(false);
// Replace writer
LogHelper.removeStdOutput();
LogHelper.addOutput(new JLineOutput());
}
@Override
public void bell() throws IOException {
reader.beep();
}
@Override
public void clear() throws IOException {
reader.clearScreen();
}
@Override
public String readLine() throws IOException {
return reader.readLine("> ");
}
private final class JLineOutput implements LogHelper.Output {
private final String ANSI_RESET = LogHelper.JANSI ?
Ansi.ansi().reset().toString() : "\u0027[m";
@Override
public void println(String message) {
try {
reader.println(ConsoleReader.RESET_LINE + message + ANSI_RESET);
reader.drawLine();
reader.flush();
} catch (IOException ignored) {
// Ignored
}
}
}
}