2016-03-15 07:02:16 +00:00
|
|
|
|
2016-03-03 08:34:22 +00:00
|
|
|
/**
|
|
|
|
* Created by liuzheng on 3/3/16.
|
|
|
|
*/
|
2016-03-04 12:09:05 +00:00
|
|
|
var rowHeight = 1;
|
|
|
|
var colWidth = 1;
|
2016-03-15 07:02:16 +00:00
|
|
|
function WSSHClient() {
|
|
|
|
}
|
|
|
|
WSSHClient.prototype._generateEndpoint = function (options) {
|
|
|
|
console.log(options);
|
2016-03-03 08:39:14 +00:00
|
|
|
if (window.location.protocol == 'https:') {
|
|
|
|
var protocol = 'wss://';
|
|
|
|
} else {
|
|
|
|
var protocol = 'ws://';
|
|
|
|
}
|
2016-03-03 08:34:22 +00:00
|
|
|
|
2016-03-15 07:02:16 +00:00
|
|
|
var endpoint = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + '/ws/terminal' + document.URL.match(/(\?.*)/);
|
|
|
|
return endpoint;
|
|
|
|
};
|
|
|
|
WSSHClient.prototype.connect = function (options) {
|
|
|
|
var endpoint = this._generateEndpoint(options);
|
|
|
|
|
|
|
|
if (window.WebSocket) {
|
|
|
|
this._connection = new WebSocket(endpoint);
|
|
|
|
}
|
|
|
|
else if (window.MozWebSocket) {
|
|
|
|
this._connection = MozWebSocket(endpoint);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
options.onError('WebSocket Not Supported');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
this._connection.onopen = function () {
|
|
|
|
options.onConnect();
|
|
|
|
};
|
|
|
|
|
|
|
|
this._connection.onmessage = function (evt) {
|
2016-04-05 02:53:35 +00:00
|
|
|
try {
|
2016-03-15 07:06:37 +00:00
|
|
|
options.onData(evt.data);
|
|
|
|
} catch (e) {
|
|
|
|
var data = JSON.parse(evt.data.toString());
|
2016-03-15 07:02:16 +00:00
|
|
|
options.onError(data.error);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
this._connection.onclose = function (evt) {
|
|
|
|
options.onClose();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
WSSHClient.prototype.send = function (data) {
|
|
|
|
this._connection.send(JSON.stringify({'data': data}));
|
|
|
|
};
|
|
|
|
|
|
|
|
function openTerminal(options) {
|
|
|
|
var client = new WSSHClient();
|
2016-04-05 02:53:35 +00:00
|
|
|
var rowHeight, colWidth;
|
|
|
|
try {
|
|
|
|
rowHeight = localStorage.getItem('term-row');
|
|
|
|
colWidth = localStorage.getItem('term-col');
|
|
|
|
} catch (err) {
|
2016-04-06 02:24:18 +00:00
|
|
|
rowHeight = 35;
|
|
|
|
colWidth = 100
|
2016-04-05 02:53:35 +00:00
|
|
|
}
|
2016-04-06 02:24:18 +00:00
|
|
|
if(rowHeight){}else{rowHeight=35};
|
|
|
|
if(colWidth){}else{colWidth=100};
|
2016-04-05 02:53:35 +00:00
|
|
|
|
2016-03-03 09:03:47 +00:00
|
|
|
var term = new Terminal({
|
|
|
|
rows: rowHeight,
|
|
|
|
cols: colWidth,
|
|
|
|
useStyle: true,
|
|
|
|
screenKeys: true
|
2016-03-03 08:39:14 +00:00
|
|
|
});
|
|
|
|
term.open();
|
2016-03-03 09:03:47 +00:00
|
|
|
term.on('data', function (data) {
|
2016-03-15 07:02:16 +00:00
|
|
|
client.send(data)
|
2016-03-03 09:03:47 +00:00
|
|
|
});
|
2016-03-03 08:39:14 +00:00
|
|
|
$('.terminal').detach().appendTo('#term');
|
2016-04-05 02:53:35 +00:00
|
|
|
//term.resize(colWidth, rowHeight);
|
2016-03-03 08:39:14 +00:00
|
|
|
term.write('Connecting...');
|
2016-03-15 07:02:16 +00:00
|
|
|
client.connect($.extend(options, {
|
|
|
|
onError: function (error) {
|
|
|
|
term.write('Error: ' + error + '\r\n');
|
|
|
|
},
|
|
|
|
onConnect: function () {
|
|
|
|
// Erase our connecting message
|
2016-04-05 02:53:35 +00:00
|
|
|
client.send({'resize': {'rows': rowHeight, 'cols': colWidth}});
|
2016-03-15 07:02:16 +00:00
|
|
|
term.write('\r');
|
|
|
|
},
|
|
|
|
onClose: function () {
|
|
|
|
term.write('Connection Reset By Peer');
|
|
|
|
},
|
|
|
|
onData: function (data) {
|
|
|
|
term.write(data);
|
2016-03-04 15:57:39 +00:00
|
|
|
}
|
2016-03-15 07:02:16 +00:00
|
|
|
}));
|
2016-04-05 02:53:35 +00:00
|
|
|
//rowHeight = 0.0 + 1.00 * $('.terminal').height() / 24;
|
|
|
|
//colWidth = 0.0 + 1.00 * $('.terminal').width() / 80;
|
2016-03-15 07:02:16 +00:00
|
|
|
return {'term': term, 'client': client};
|
2016-03-03 08:39:14 +00:00
|
|
|
}
|
2016-03-03 08:34:22 +00:00
|
|
|
|
2016-04-05 02:53:35 +00:00
|
|
|
//function resize() {
|
|
|
|
// $('.terminal').css('width', window.innerWidth - 25);
|
|
|
|
// console.log(window.innerWidth);
|
|
|
|
// console.log(window.innerWidth - 10);
|
|
|
|
// var rows = Math.floor(window.innerHeight / rowHeight) - 2;
|
|
|
|
// var cols = Math.floor(window.innerWidth / colWidth) - 1;
|
|
|
|
//
|
|
|
|
// return {rows: rows, cols: cols};
|
|
|
|
//}
|
2016-03-03 08:34:22 +00:00
|
|
|
|
2016-03-03 08:39:14 +00:00
|
|
|
$(document).ready(function () {
|
|
|
|
var options = {};
|
2016-03-03 08:34:22 +00:00
|
|
|
|
2016-03-03 08:39:14 +00:00
|
|
|
$('#ssh').show();
|
|
|
|
var term_client = openTerminal(options);
|
|
|
|
console.log(rowHeight);
|
2016-03-24 09:17:47 +00:00
|
|
|
// by liuzheng712 because it will bring record bug
|
|
|
|
//window.onresize = function () {
|
|
|
|
// var geom = resize();
|
|
|
|
// console.log(geom);
|
|
|
|
// term_client.term.resize(geom.cols, geom.rows);
|
|
|
|
// term_client.client.send({'resize': {'rows': geom.rows, 'cols': geom.cols}});
|
|
|
|
// $('#ssh').show();
|
|
|
|
//}
|
2016-04-05 02:53:35 +00:00
|
|
|
try {
|
|
|
|
$('#term-row')[0].value = localStorage.getItem('term-row');
|
|
|
|
$('#term-col')[0].value = localStorage.getItem('term-col');
|
|
|
|
} catch (err) {
|
2016-04-06 02:24:18 +00:00
|
|
|
$('#term-row')[0].value = 35;
|
|
|
|
$('#term-col')[0].value = 100;
|
2016-04-05 02:53:35 +00:00
|
|
|
}
|
|
|
|
$('#col-row').click(function () {
|
|
|
|
var col = $('#term-col').val();
|
|
|
|
var row = $('#term-row').val();
|
|
|
|
localStorage.setItem('term-col', col);
|
|
|
|
localStorage.setItem('term-row', row);
|
|
|
|
term_client.term.resize(col, row);
|
|
|
|
term_client.client.send({'resize': {'rows': row, 'cols': col}});
|
|
|
|
$('#ssh').show();
|
|
|
|
})
|
2016-03-03 08:34:22 +00:00
|
|
|
|
2016-03-03 08:39:14 +00:00
|
|
|
});
|