package com.netifera.platform.host.internal.terminal.ui.pty;
import java.io.IOException;
import java.io.OutputStream;
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl;
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
import org.eclipse.tm.internal.terminal.provisional.api.provider.TerminalConnectorImpl;
import com.netifera.platform.api.probe.IProbe;
import com.netifera.platform.host.internal.terminal.ui.Activator;
import com.netifera.platform.host.terminal.ITerminal;
import com.netifera.platform.host.terminal.ITerminalManager;
import com.netifera.platform.host.terminal.ITerminalOutputHandler;
public class PTYConnector extends TerminalConnectorImpl {
private OutputStream outputStream;
private IProbe probe;
private ITerminal terminalInstance;
PTYConnector(IProbe probe) {
this.probe = probe;
}
public void connect(final ITerminalControl control) {
super.connect(control);
control.setState(TerminalState.CONNECTING);
ITerminalManager terminalManager = Activator.getInstance().getTerminalManagerFactory().createForProbe(probe);
terminalInstance = terminalManager.openTerminal("/bin/bash", new ITerminalOutputHandler() {
public void terminalOutput(String ptyName, byte[] data, int length) {
try {
control.getRemoteToTerminalOutputStream().write(data, 0, data.length);
} catch (IOException e) {
e.printStackTrace();
}
}
public void terminalClosed(String ptyName) {
control.displayTextInTerminal("\nTerminal Closed\n");
disconnect();
}
});
if(terminalInstance == null) {
control.setState(TerminalState.CLOSED);
return;
}
outputStream = new PtyOutputStream(terminalInstance);
control.setState(TerminalState.CONNECTED);
}
@Override
public String getSettingsSummary() {
return null;
}
@Override
public OutputStream getTerminalToRemoteStream() {
return outputStream;
}
public void setTerminalSize(int newWidth, int newHeight) {
terminalInstance.setSize(newWidth, newHeight);
}
}