1/** 2 * Directive for KVM (Kernel-based Virtual Machine) 3 * 4 * @module app/serverControl 5 * @exports kvmConsole 6 * @name kvmConsole 7 */ 8 9import RFB from '@novnc/novnc/core/rfb.js'; 10 11window.angular && (function(angular) { 12 'use strict'; 13 14 angular.module('app.serverControl').directive('kvmConsole', [ 15 '$log', '$location', 16 function($log, $location) { 17 return { 18 restrict: 'E', template: require('./kvm-console.html'), 19 scope: {newWindowBtn: '=?'}, link: function(scope, element) { 20 var rfb; 21 22 element.on('$destroy', function() { 23 if (rfb) { 24 rfb.disconnect(); 25 } 26 }); 27 28 function sendCtrlAltDel() { 29 rfb.sendCtrlAltDel(); 30 return false; 31 }; 32 33 function connected(e) { 34 $log.debug('RFB Connected'); 35 } 36 37 function disconnected(e) { 38 $log.debug('RFB disconnected'); 39 } 40 41 var host = $location.host(); 42 var port = $location.port(); 43 var target = element[0].firstElementChild; 44 try { 45 rfb = new RFB( 46 target, 'wss://' + host + ':' + port + '/kvm/0', {}); 47 48 rfb.addEventListener('connect', connected); 49 rfb.addEventListener('disconnect', disconnected); 50 } catch (exc) { 51 $log.error(exc); 52 updateState( 53 null, 'fatal', null, 54 'Unable to create RFB client -- ' + exc); 55 return; // don't continue trying to connect 56 }; 57 58 scope.openWindow = function() { 59 window.open( 60 '#/server-control/kvm-window', 'Kvm Window', 61 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=1125,height=900'); 62 }; 63 } 64 } 65 } 66 ]); 67})(window.angular); 68