Archived
0

Zond: добавляем JLine

This commit is contained in:
2017-06-14 11:26:08 +03:00
parent 811ae71d84
commit 6d0ada1af3
3 changed files with 98 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
group = 'asys' group = 'asys'
version = '0.5.6-SNAPSHOT' version = '0.6-SNAPSHOT'
apply plugin: 'application' apply plugin: 'application'
@@ -46,4 +46,5 @@ dependencies {
includedEx group: 'org.apache.commons', name: 'commons-exec', version: '1.3' includedEx group: 'org.apache.commons', name: 'commons-exec', version: '1.3'
included group: 'io.netty', name: 'netty-codec', version: nettyVersion included group: 'io.netty', name: 'netty-codec', version: nettyVersion
included group: 'com.google.guava', name: 'guava', version: '21.0' included group: 'com.google.guava', name: 'guava', version: '21.0'
included group: 'jline', name: 'jline', version: '2.13'
} }

View File

@@ -0,0 +1,58 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2017-06-14
*/
package asys.zond;
import jline.console.ConsoleReader;
import java.io.*;
public class JlineProxySysOut extends PrintStream {
private ConsoleReader consoleReader;
private PrintWriter writer;
public JlineProxySysOut(OutputStream out) {
super(out, true);
}
public void setConsoleReader(ConsoleReader consoleReader) {
this.consoleReader = consoleReader;
this.writer = new PrintWriter(consoleReader.getOutput());
}
private void _print(String s) {
writer.print(ConsoleReader.RESET_LINE);
writer.print(s);
cleanTrashLine(s);
writer.println();
try {
consoleReader.drawLine();
} catch (IOException ignore) {
}
writer.flush();
}
/**
* Очистка печатной строки от мусора
*/
private void cleanTrashLine(String string) {
// очищает полностью строку
if (consoleReader.getCursorBuffer().buffer.length() + consoleReader.getPrompt().length() > string.length()) {
for (int i = string.length(); i <= consoleReader.getCursorBuffer().buffer.length() + 2; i++) {
writer.print(' ');
}
}
}
@Override
public void write(byte[] buf, int off, int len) {
if ((char)buf[len-1] == '\n') len--; //TODO проверить в windows
_print(new String(buf, off, len));
}
@Override
public void println(String x) {
_print(x);
}
}

View File

@@ -6,6 +6,7 @@
package asys.zond; package asys.zond;
import asys.zond.proxy.Connector; import asys.zond.proxy.Connector;
import jline.console.ConsoleReader;
import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException; import org.apache.commons.exec.ExecuteException;
@@ -49,19 +50,46 @@ public class Main {
} }
loadConfig(); loadConfig();
Connector.getInstance().startReconnect();
int resultCode = executeProcess(args); JlineProxySysOut proxySysOut = new JlineProxySysOut(System.out);
ConsoleReader console = new ConsoleReader(System.in, proxySysOut);
proxySysOut.setConsoleReader(console);
console.setPrompt(ConsoleReader.RESET_LINE + ":");
Thread thread = new Thread(() -> {
Thread current = Thread.currentThread();
Connector.getInstance().setNeedReconnect(false); try {
Connector.getInstance().stopReconnect(); while (!current.isInterrupted()) {
Connector.getInstance().disconnect(); String line;
if ((line = console.readLine()) != null) {
proxySysOut.println(line);
}
}
} catch (Exception e) {
e.printStackTrace(); //FIXME
}
});
try {
thread.join();
thread.start();
} catch (Exception e) {
e.printStackTrace();//FIXME
}
System.out.println(
Ansi.ansi().reset().newline() // Connector.getInstance().startReconnect();
.fg(Color.GREEN).a("Process Finished. Code: ")
.bold().fg(Color.WHITE).a(resultCode).reset() // int resultCode = executeProcess(args);
);
// Connector.getInstance().setNeedReconnect(false);
// Connector.getInstance().stopReconnect();
// Connector.getInstance().disconnect();
// System.out.println(
// Ansi.ansi().reset().newline()
// .fg(Color.GREEN).a("Process Finished. Code: ")
// .bold().fg(Color.WHITE).a(resultCode).reset()
// );
} }
private static int executeProcess(String[] args) { private static int executeProcess(String[] args) {