blob: c2e14357faf232711e3942932e3037807b721d4b [file] [log] [blame]
/**
* Controller for server
*
* @module app/serverControl
* @exports remoteConsoleController
* @name remoteConsoleController
*/
import {
hterm,
lib
}
from 'hterm-umdjs';
window.angular && (function(angular) {
'use strict';
angular
.module('app.serverControl')
.controller('remoteConsoleController', [
'$scope',
'$window',
'APIUtils',
'dataService',
function($scope, $window, APIUtils, dataService) {
$scope.dataService = dataService;
// See https://github.com/macton/hterm for available hterm options
hterm.defaultStorage = new lib.Storage.Local();
var term = new hterm.Terminal('host-console');
term.decorate(document.querySelector('#terminal'));
//Set cursor color
term.prefs_.set('cursor-color', 'rgba(83, 146, 255, .5)');
//Set background color
term.prefs_.set('background-color', '#19273c');
//Allows keyboard input
term.installKeyboard();
//The BMC exposes a websocket at /console0. This can be read
//or written to access the host serial console.
var hostname = dataService.getHost().replace('https://', '');
var host = 'wss://' + hostname + '/console0';
var ws = new WebSocket(host);
ws.onmessage = function(evt) {
//websocket -> terminal
term.io.print(evt.data);
};
//terminal -> websocket
term.onTerminalReady = function() {
var io = term.io.push();
io.onVTKeystroke = function(str) {
ws.send(str);
};
io.sendString = function(str) {
ws.send(str);
};
};
ws.onopen = function() {
console.log('websocket opened');
};
ws.onclose = function() {
console.log('websocket closed');
};
$scope.$on('$destroy', function() {
if (ws) {
ws.close();
}
});
$scope.openTerminalWindow = function() {
dataService.setRemoteWindowActive();
$window.open('#/server-control/remote-console-window', 'Remote Console Window', 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=600,height=400');
};
}
]);
})(angular);