1198ce1ffSYoshie Muranaka/** 2198ce1ffSYoshie Muranaka * Directive for KVM (Kernel-based Virtual Machine) 3198ce1ffSYoshie Muranaka * 4198ce1ffSYoshie Muranaka * @module app/serverControl 5198ce1ffSYoshie Muranaka * @exports kvmConsole 6198ce1ffSYoshie Muranaka * @name kvmConsole 7198ce1ffSYoshie Muranaka */ 8198ce1ffSYoshie Muranaka 9198ce1ffSYoshie Muranakaimport RFB from '@novnc/novnc/core/rfb.js'; 10198ce1ffSYoshie Muranaka 11198ce1ffSYoshie Muranakawindow.angular && (function(angular) { 12198ce1ffSYoshie Muranaka 'use strict'; 13198ce1ffSYoshie Muranaka 14198ce1ffSYoshie Muranaka angular.module('app.serverControl').directive('kvmConsole', [ 15c3f5e318SJames Feist '$log', '$cookies', '$location', 16*052a282fSJames Feist function($log, $cookies, $location) { 17198ce1ffSYoshie Muranaka return { 18198ce1ffSYoshie Muranaka restrict: 'E', template: require('./kvm-console.html'), 19bea45d53SDixsie Wolmers scope: {newWindowBtn: '=?'}, link: function(scope, element) { 20198ce1ffSYoshie Muranaka var rfb; 21198ce1ffSYoshie Muranaka 22198ce1ffSYoshie Muranaka element.on('$destroy', function() { 23198ce1ffSYoshie Muranaka if (rfb) { 24198ce1ffSYoshie Muranaka rfb.disconnect(); 25198ce1ffSYoshie Muranaka } 26198ce1ffSYoshie Muranaka }); 27198ce1ffSYoshie Muranaka 28198ce1ffSYoshie Muranaka function sendCtrlAltDel() { 29198ce1ffSYoshie Muranaka rfb.sendCtrlAltDel(); 30198ce1ffSYoshie Muranaka return false; 31198ce1ffSYoshie Muranaka }; 32198ce1ffSYoshie Muranaka 33198ce1ffSYoshie Muranaka function connected(e) { 34198ce1ffSYoshie Muranaka $log.debug('RFB Connected'); 35198ce1ffSYoshie Muranaka } 36bea45d53SDixsie Wolmers 37198ce1ffSYoshie Muranaka function disconnected(e) { 38198ce1ffSYoshie Muranaka $log.debug('RFB disconnected'); 39198ce1ffSYoshie Muranaka } 40198ce1ffSYoshie Muranaka 41198ce1ffSYoshie Muranaka var host = $location.host(); 42198ce1ffSYoshie Muranaka var port = $location.port(); 43198ce1ffSYoshie Muranaka var target = element[0].firstElementChild; 44198ce1ffSYoshie Muranaka try { 45c3f5e318SJames Feist var token = $cookies.get('XSRF-TOKEN'); 46198ce1ffSYoshie Muranaka rfb = new RFB( 47c3f5e318SJames Feist target, 'wss://' + host + '/kvm/0', 48c3f5e318SJames Feist {'wsProtocols': [token]}); 49198ce1ffSYoshie Muranaka rfb.addEventListener('connect', connected); 50198ce1ffSYoshie Muranaka rfb.addEventListener('disconnect', disconnected); 51198ce1ffSYoshie Muranaka } catch (exc) { 52198ce1ffSYoshie Muranaka $log.error(exc); 53198ce1ffSYoshie Muranaka updateState( 54198ce1ffSYoshie Muranaka null, 'fatal', null, 55198ce1ffSYoshie Muranaka 'Unable to create RFB client -- ' + exc); 56198ce1ffSYoshie Muranaka return; // don't continue trying to connect 57198ce1ffSYoshie Muranaka }; 58bea45d53SDixsie Wolmers 59bea45d53SDixsie Wolmers scope.openWindow = function() { 60bea45d53SDixsie Wolmers window.open( 61bea45d53SDixsie Wolmers '#/server-control/kvm-window', 'Kvm Window', 62bea45d53SDixsie Wolmers 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=1125,height=900'); 63bea45d53SDixsie Wolmers }; 64198ce1ffSYoshie Muranaka } 65198ce1ffSYoshie Muranaka } 66198ce1ffSYoshie Muranaka } 67198ce1ffSYoshie Muranaka ]); 68198ce1ffSYoshie Muranaka})(window.angular); 69