|
|
|
@ -54,6 +54,7 @@ import java.io.InputStreamReader;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
|
|
|
|
|
|
import de.anomic.plasma.plasmaSwitchboard;
|
|
|
|
|
import de.anomic.server.logging.serverLog;
|
|
|
|
@ -470,16 +471,27 @@ nextLine:
|
|
|
|
|
{
|
|
|
|
|
private final InputStream stream;
|
|
|
|
|
private final List<String> output = new ArrayList<String>();
|
|
|
|
|
private final Semaphore dataIsRead = new Semaphore(1);
|
|
|
|
|
/**
|
|
|
|
|
* FIXME just for debugging
|
|
|
|
|
*/
|
|
|
|
|
private final String name;
|
|
|
|
|
private boolean done = false;
|
|
|
|
|
|
|
|
|
|
public consoleInterface (final InputStream stream, String name)
|
|
|
|
|
{
|
|
|
|
|
this.stream = stream;
|
|
|
|
|
this.name = name;
|
|
|
|
|
// block reading {@see getOutput()}
|
|
|
|
|
try {
|
|
|
|
|
dataIsRead.acquire();
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
// this should never happen because this is a constructor
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
|
// a second run adds data! a output.clear() maybe needed
|
|
|
|
|
try {
|
|
|
|
|
final InputStreamReader input = new InputStreamReader(stream);
|
|
|
|
|
final BufferedReader buffer = new BufferedReader(input);
|
|
|
|
@ -488,6 +500,7 @@ nextLine:
|
|
|
|
|
while (tries < 1000) {
|
|
|
|
|
tries++;
|
|
|
|
|
try {
|
|
|
|
|
// may block!
|
|
|
|
|
Thread.sleep(1);
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
// just stop sleeping
|
|
|
|
@ -499,22 +512,29 @@ nextLine:
|
|
|
|
|
while((line = buffer.readLine()) != null) {
|
|
|
|
|
output.add(line);
|
|
|
|
|
}
|
|
|
|
|
done = true;
|
|
|
|
|
} catch(final IOException ix) { log.logWarning("logpoint 4 " + ix.getMessage());}
|
|
|
|
|
dataIsRead.release();
|
|
|
|
|
} catch(final IOException ix) { log.logWarning("logpoint 6 " + ix.getMessage());}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* waits until the stream is read and returns all data
|
|
|
|
|
*
|
|
|
|
|
* @return lines of text in stream
|
|
|
|
|
*/
|
|
|
|
|
public List<String> getOutput(){
|
|
|
|
|
while(!isDone()) {
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(1);
|
|
|
|
|
} catch (InterruptedException e) {}
|
|
|
|
|
// wait that data is ready
|
|
|
|
|
try {
|
|
|
|
|
log.logInfo("logpoint 4 waiting for data of '"+ name +"'");
|
|
|
|
|
final long start = System.currentTimeMillis();
|
|
|
|
|
dataIsRead.acquire();
|
|
|
|
|
log.logInfo("logpoint 5 data ready for '"+ name +"' after "+ (System.currentTimeMillis() - start) +" ms");
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
// after interrupt just return what is available (maybe nothing)
|
|
|
|
|
}
|
|
|
|
|
// is just for checking availability, so release it immediatly
|
|
|
|
|
dataIsRead.release();
|
|
|
|
|
return output;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isDone() {
|
|
|
|
|
return done;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|