forked from I2P_Developers/i2p.i2p
more client test enhancements
This commit is contained in:
@ -20,6 +20,7 @@ public class SAMReader {
|
|||||||
private final InputStream _inRaw;
|
private final InputStream _inRaw;
|
||||||
private final SAMClientEventListener _listener;
|
private final SAMClientEventListener _listener;
|
||||||
private volatile boolean _live;
|
private volatile boolean _live;
|
||||||
|
private Thread _thread;
|
||||||
|
|
||||||
public SAMReader(I2PAppContext context, InputStream samIn, SAMClientEventListener listener) {
|
public SAMReader(I2PAppContext context, InputStream samIn, SAMClientEventListener listener) {
|
||||||
_log = context.logManager().getLog(SAMReader.class);
|
_log = context.logManager().getLog(SAMReader.class);
|
||||||
@ -27,13 +28,22 @@ public class SAMReader {
|
|||||||
_listener = listener;
|
_listener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startReading() {
|
public synchronized void startReading() {
|
||||||
|
if (_live)
|
||||||
|
throw new IllegalStateException();
|
||||||
_live = true;
|
_live = true;
|
||||||
I2PAppThread t = new I2PAppThread(new Runner(), "SAM reader");
|
I2PAppThread t = new I2PAppThread(new Runner(), "SAM reader");
|
||||||
t.start();
|
t.start();
|
||||||
|
_thread = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopReading() { _live = false; }
|
public synchronized void stopReading() {
|
||||||
|
_live = false;
|
||||||
|
if (_thread != null) {
|
||||||
|
_thread.interrupt();
|
||||||
|
_thread = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Async event notification interface for SAM clients
|
* Async event notification interface for SAM clients
|
||||||
@ -89,10 +99,11 @@ public class SAMReader {
|
|||||||
}
|
}
|
||||||
if (c == -1) {
|
if (c == -1) {
|
||||||
_log.error("Error reading from the SAM bridge");
|
_log.error("Error reading from the SAM bridge");
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
_log.error("Error reading from SAM", ioe);
|
_log.error("Error reading from SAM", ioe);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
String line = new String(baos.toByteArray());
|
String line = new String(baos.toByteArray());
|
||||||
@ -103,14 +114,15 @@ public class SAMReader {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_log.debug("Line read from the bridge: " + line);
|
if (_log.shouldDebug())
|
||||||
|
_log.debug("Line read from the bridge: " + line);
|
||||||
|
|
||||||
StringTokenizer tok = new StringTokenizer(line);
|
StringTokenizer tok = new StringTokenizer(line);
|
||||||
|
|
||||||
if (tok.countTokens() < 2) {
|
if (tok.countTokens() < 2) {
|
||||||
_log.error("Invalid SAM line: [" + line + "]");
|
_log.error("Invalid SAM line: [" + line + "]");
|
||||||
_live = false;
|
_live = false;
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
String major = tok.nextToken();
|
String major = tok.nextToken();
|
||||||
@ -133,6 +145,8 @@ public class SAMReader {
|
|||||||
|
|
||||||
processEvent(major, minor, params);
|
processEvent(major, minor, params);
|
||||||
}
|
}
|
||||||
|
if (_log.shouldWarn())
|
||||||
|
_log.warn("SAMReader exiting");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,6 +263,11 @@ public class SAMStreamSend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
closed();
|
closed();
|
||||||
|
if (_log.shouldLog(Log.DEBUG))
|
||||||
|
_log.debug("Runner exiting");
|
||||||
|
// stop the reader, since we're only doing this once for testing
|
||||||
|
// you wouldn't do this in a real application
|
||||||
|
_reader.stopReading();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user