| import {hterm, lib} from 'hterm-umdjs'; |
| |
| window.angular && (function(angular) { |
| 'use strict'; |
| |
| angular.module('app.common.directives').directive('serialConsole', [ |
| function() { |
| return { |
| 'restrict': 'E', |
| 'template': require('./serial-console.html'), |
| 'scope': {'path': '='}, |
| 'controller': [ |
| '$scope', '$window', 'dataService', |
| function($scope, $window, 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(event) { |
| console.log( |
| 'websocket closed. code: ' + event.code + |
| ' reason: ' + event.reason); |
| }; |
| } |
| ] |
| }; |
| } |
| ]); |
| })(window.angular); |