blob: c9720d547bfb97c0faf6fef5670c390ef1024fbc [file] [log] [blame]
package org.eclipse.debug.internal.core;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.debug.core.model.IStreamMonitor;
import org.eclipse.debug.core.model.IStreamsProxy;
import java.io.IOException;
public class StreamsProxy implements IStreamsProxy {
/**
* The monitor for the output stream (connected to standard out of the process)
*/
private OutputStreamMonitor fOutputMonitor;
/**
* The monitor for the error stream (connected to standard error of the process)
*/
private OutputStreamMonitor fErrorMonitor;
/**
* The monitor for the input stream (connected to standard in of the process)
*/
private InputStreamMonitor fInputMonitor;
/**
* Records the open/closed state of communications with
* the underlying streams.
*/
private boolean fClosed= false;
/**
* Creates a <code>StreamsProxy</code> on the streams
* of the given <code>IProcess</code>.
*/
public StreamsProxy(RuntimeProcess process) {
if (process == null) {
return;
}
fOutputMonitor= new OutputStreamMonitor(process.getInputStream());
fErrorMonitor= new OutputStreamMonitor(process.getErrorStream());
fInputMonitor= new InputStreamMonitor(process.getOutputStream());
fOutputMonitor.startMonitoring();
fErrorMonitor.startMonitoring();
fInputMonitor.startMonitoring();
}
/**
* Causes the proxy to close all
* communications between it and the
* underlying streams after all remaining data
* in the streams is read.
*/
protected void close() {
if (!fClosed) {
fClosed= true;
fOutputMonitor.close();
fErrorMonitor.close();
fInputMonitor.close();
}
}
/**
* Causes the proxy to close all
* communications between it and the
* underlying streams immediately.
* Data remaining in the streams is lost.
*/
protected void kill() {
fClosed= true;
fOutputMonitor.kill();
fErrorMonitor.kill();
fInputMonitor.close();
}
/**
* @see IStreamsProxy#getErrorStreamMonitor()
*/
public IStreamMonitor getErrorStreamMonitor() {
return fErrorMonitor;
}
/**
* @see IStreamsProxy#getOutputStreamMonitor()
*/
public IStreamMonitor getOutputStreamMonitor() {
return fOutputMonitor;
}
/**
* @see IStreamsProxy#write(String)
*/
public void write(String input) throws IOException {
if (!fClosed) {
fInputMonitor.write(input);
} else {
throw new IOException();
}
}
}