package com.intellij.lang.javascript.flex.flexunit;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.EventDispatcher;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.EventListener;
public class FlexUnitConnection extends ServerConnectionBase {
public interface Listener extends EventListener {
void statusChanged(ConnectionStatus status);
void onData(String line);
void onFinish();
}
private static final String TERMINATE_MARKER = "Finish";
private static final Logger LOG = Logger.getInstance(FlexUnitConnection.class.getName());
protected final EventDispatcher<Listener> myDispatcher = EventDispatcher.create(Listener.class);
//private OutputStreamWriter myWriter;
protected void run(InputStream inputStream) throws IOException {
DataInputStream dataInputStream = new DataInputStream(inputStream);
String line;
while (!isStopped() && !StringUtil.isEmpty(line = dataInputStream.readUTF())) {
LOG.debug(line);
if (TERMINATE_MARKER.equals(line)) {
//log("sending terminate command");
//write(TERMINATE_MARKER);
close();
myDispatcher.getMulticaster().onFinish();
return;
}
else {
myDispatcher.getMulticaster().onData(line);
}
}
}
public void addListener(Listener listener) {
myDispatcher.addListener(listener);
}
@Override
protected void setStatus(ConnectionStatus status) {
super.setStatus(status);
myDispatcher.getMulticaster().statusChanged(status);
}
}