From 4e533cc63bdfb783be828cbce0e11cb63c9c665c Mon Sep 17 00:00:00 2001 From: Jared Tabor Date: Wed, 14 Sep 2016 11:39:27 -0700 Subject: [PATCH] adding disconnect function for logging out and adding ability to specify `socket: null` for a route definition, in order to specify a state that should not subscribe/unsubscribe at all (for login state). --- .../authentication.service.js | 2 + awx/ui/client/src/login/login.route.js | 1 + .../src/shared/socket/socket.service.js | 59 +++---------------- .../src/shared/stateExtender.provider.js | 46 +++++++-------- 4 files changed, 33 insertions(+), 75 deletions(-) diff --git a/awx/ui/client/src/login/authenticationServices/authentication.service.js b/awx/ui/client/src/login/authenticationServices/authentication.service.js index c65ca0061d..73d42a3e50 100644 --- a/awx/ui/client/src/login/authenticationServices/authentication.service.js +++ b/awx/ui/client/src/login/authenticationServices/authentication.service.js @@ -65,6 +65,7 @@ export default var x, ConfigService = $injector.get('ConfigService'), + SocketService = $injector.get('SocketService'), scope = angular.element(document.getElementById('main-view')).scope(); if(scope){ @@ -94,6 +95,7 @@ export default $rootScope.lastUser = $cookieStore.get('current_user').id; } ConfigService.delete(); + SocketService.disconnect(); $cookieStore.remove('token_expires'); $cookieStore.remove('current_user'); $cookieStore.remove('token'); diff --git a/awx/ui/client/src/login/login.route.js b/awx/ui/client/src/login/login.route.js index 83b403ce6c..561cc3958a 100644 --- a/awx/ui/client/src/login/login.route.js +++ b/awx/ui/client/src/login/login.route.js @@ -9,6 +9,7 @@ import {templateUrl} from '../shared/template-url/template-url.factory'; export default { name: 'signIn', route: '/login', + socket: null, templateUrl: templateUrl('login/loginBackDrop'), resolve: { obj: ['$rootScope', 'Authorization', diff --git a/awx/ui/client/src/shared/socket/socket.service.js b/awx/ui/client/src/shared/socket/socket.service.js index 981c6ee12e..1d14d72b69 100644 --- a/awx/ui/client/src/shared/socket/socket.service.js +++ b/awx/ui/client/src/shared/socket/socket.service.js @@ -17,7 +17,6 @@ export default $log.debug('Socket connecting to: ' + url); self.socket = new ReconnectingWebSocket(url, null, { - // debug: true, timeoutInterval: 3000, maxReconnectAttempts: 10 }); @@ -31,6 +30,10 @@ export default $log.debug('Error Logged: ' + error); //log errors }; + self.socket.onclose = function (error) { + $log.debug('Websocket Disconnected.'); + }; + self.socket.onmessage = function (e) { $log.debug('Received From Server: ' + e.data); var data = JSON.parse(e.data), str = ""; @@ -59,56 +62,6 @@ export default str = `${$state.current.name}-${data.group_name}`; } $rootScope.$emit(str, data); - // if(data.group_name==="jobs"){ - // - // if (!('status' in data)){ - // // we know that this must have been a - // // summary complete message - // $log.debug('Job summary_complete ' + data.unified_job_id); - // $rootScope.$emit('JobSummaryComplete', data); - // } - // - // if ($state.is('jobs')) { - // $rootScope.$emit('JobStatusChange-jobs', data); - // } - // else if ($state.includes('jobDetail') || - // $state.is('adHocJobStdout') || - // $state.is('inventorySyncStdout') || - // $state.is('managementJobStdout') || - // $state.is('scmUpdateStdout')) { - // - // $log.debug("sending status to standard out"); - // $rootScope.$emit('JobStatusChange-jobStdout', data); - // } - // if ($state.includes('jobDetail')) { - // $rootScope.$emit('JobStatusChange-jobDetails', data); - // } else if ($state.is('dashboard')) { - // $rootScope.$emit('JobStatusChange-home', data); - // } else if ($state.is('portalMode')) { - // $rootScope.$emit('JobStatusChange-portal', data); - // } else if ($state.is('projects')) { - // $rootScope.$emit('JobStatusChange-projects', data); - // } else if ($state.is('inventoryManage') || - // $state.includes('inventoryManage')) { - // $rootScope.$emit('JobStatusChange-inventory', data); - // } - // } - // if(data.group_name==="job_events"){ - // $rootScope.$emit('job_events-'+data.job, data); - // } - // if(data.group_name==="schedules"){ - // $log.debug('Schedule ' + data.unified_job_id + ' status changed to ' + data.status); - // $rootScope.$emit('ScheduleStatusChange', data); - // } - // if(data.group_name==="ad_hoc_command_events"){ - // $rootScope.$emit('ad_hoc_command_events-'+data.ad_hoc_command, data); - // } - // if(data.group_name==="control"){ - // $log.debug(data.reason); - // $rootScope.sessionTimer.expireSession('session_limit'); - // $state.go('signOut'); - // } - return self.socket; }; @@ -125,6 +78,9 @@ export default $log.debug('socket status: ' + $rootScope.socketStatus); }, 2000); }, + disconnect: function(){ + this.socket.close(); + }, subscribe: function(state){ console.log("Next state: " + state.name); this.emit(JSON.stringify(state.socket)); @@ -156,7 +112,6 @@ export default } }, checkStatus: function() { - function getSocketTip(status) { var result = ''; switch(status) { diff --git a/awx/ui/client/src/shared/stateExtender.provider.js b/awx/ui/client/src/shared/stateExtender.provider.js index a80c285245..66f01e0051 100644 --- a/awx/ui/client/src/shared/stateExtender.provider.js +++ b/awx/ui/client/src/shared/stateExtender.provider.js @@ -2,35 +2,35 @@ export default function($stateProvider) { this.$get = function() { return { addSocket: function(state){ - if(!state.resolve){ - state.resolve = {}; + if(state.socket!==null){ + if(!state.resolve){ + state.resolve = {}; + } + state.resolve.socket = ['SocketService', '$rootScope', '$stateParams', + function(SocketService, $rootScope, $stateParams) { + $rootScope.socketPromise.promise.then(function(){ + if(!state.socket){ + state.socket = {groups: {}}; + SocketService.unsubscribe(state); + } + else{ + if(state.socket.groups.hasOwnProperty( "job_events")){ + state.socket.groups.job_events = [$stateParams.id]; + } + if(state.socket.groups.hasOwnProperty( "ad_hoc_command_events")){ + state.socket.groups.ad_hoc_command_events = [$stateParams.id]; + } + SocketService.subscribe(state); + } + return true; + }); + }]; } - state.resolve.socket = ['SocketService', '$rootScope', '$stateParams', - function(SocketService, $rootScope, $stateParams) { - $rootScope.socketPromise.promise.then(function(){ - if(!state.socket){ - state.socket = {groups: {}}; - SocketService.unsubscribe(state); - } - else{ - if(state.socket.groups.hasOwnProperty( "job_events")){ - state.socket.groups.job_events = [$stateParams.id]; - } - if(state.socket.groups.hasOwnProperty( "ad_hoc_command_events")){ - state.socket.groups.ad_hoc_command_events = [$stateParams.id]; - } - SocketService.subscribe(state); - } - return true; - }); - }]; }, addState: function(state) { var route = state.route || state.url; - this.addSocket(state); - $stateProvider.state(state.name, { url: route, controller: state.controller,