You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
62 lines
1.5 KiB
var term;
|
|
var ws;
|
|
|
|
function Wetty(argv) {
|
|
this.argv_ = argv;
|
|
this.io = null;
|
|
this.pid_ = -1;
|
|
}
|
|
|
|
Wetty.prototype.run = function() {
|
|
this.io = this.argv_.io.push();
|
|
|
|
this.io.onVTKeystroke = this.sendString_.bind(this);
|
|
this.io.sendString = this.sendString_.bind(this);
|
|
this.io.onTerminalResize = this.onTerminalResize.bind(this);
|
|
}
|
|
|
|
Wetty.prototype.sendString_ = function(str) {
|
|
ws.send(JSON.stringify({
|
|
data: str
|
|
}));
|
|
};
|
|
|
|
Wetty.prototype.onTerminalResize = function(col, row) {
|
|
if (ws)
|
|
ws.send(JSON.stringify({
|
|
rowcol: true,
|
|
col: col,
|
|
row: row
|
|
}));
|
|
};
|
|
|
|
ws = new WebSocket(((window.location.protocol === 'https:') ? 'wss://' : 'ws://') + window.location.host, 'wetty');
|
|
ws.onopen = function() {
|
|
lib.init(function() {
|
|
term = new hterm.Terminal();
|
|
window.term = term;
|
|
term.decorate(document.getElementById('terminal'));
|
|
|
|
term.setCursorPosition(0, 0);
|
|
term.setCursorVisible(true);
|
|
term.runCommandClass(Wetty, document.location.hash.substr(1));
|
|
ws.send(JSON.stringify({
|
|
rowcol: true,
|
|
col: term.screenSize.width,
|
|
row: term.screenSize.height
|
|
}));
|
|
});
|
|
}
|
|
ws.onmessage = function(msg) {
|
|
if (!msg || !msg.data)
|
|
return;
|
|
var data = JSON.parse(msg.data);
|
|
if (term)
|
|
term.io.writeUTF16(data.data);
|
|
}
|
|
ws.onerror = function(e) {
|
|
console.log("WebSocket connection error");
|
|
}
|
|
ws.onclose = function() {
|
|
console.log("WebSocket connection closed");
|
|
}
|
|
|