blob: ee6a5910c5c8b92297c1bd935ea30f693fd70b57 [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);