Zond: добавляем JLine
This commit is contained in:
@@ -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'
|
||||||
}
|
}
|
||||||
|
|||||||
58
zond/src/main/java/asys/zond/JlineProxySysOut.java
Normal file
58
zond/src/main/java/asys/zond/JlineProxySysOut.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user