/** * Directive for KVM (Kernel-based Virtual Machine) * * @module app/serverControl * @exports kvmConsole * @name kvmConsole */ import RFB from '@novnc/novnc/core/rfb.js'; window.angular && (function(angular) { 'use strict'; angular.module('app.serverControl').directive('kvmConsole', [ '$log', '$cookies', '$location', function($log, $cookies, $location) { return { restrict: 'E', template: require('./kvm-console.html'), scope: {newWindowBtn: '=?'}, link: function(scope, element) { var rfb; element.on('$destroy', function() { if (rfb) { rfb.disconnect(); } }); function sendCtrlAltDel() { rfb.sendCtrlAltDel(); return false; }; function connected(e) { $log.debug('RFB Connected'); } function disconnected(e) { $log.debug('RFB disconnected'); } var host = $location.host(); var port = $location.port(); var target = element[0].firstElementChild; try { var token = $cookies.get('XSRF-TOKEN'); rfb = new RFB( target, 'wss://' + host + '/kvm/0', {'wsProtocols': [token]}); rfb.addEventListener('connect', connected); rfb.addEventListener('disconnect', disconnected); } catch (exc) { $log.error(exc); updateState( null, 'fatal', null, 'Unable to create RFB client -- ' + exc); return; // don't continue trying to connect }; scope.openWindow = function() { window.open( '#/server-control/kvm-window', 'Kvm Window', 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=1125,height=900'); }; } } } ]); })(window.angular);