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).
This commit is contained in:
Jared Tabor
2016-09-14 11:39:27 -07:00
parent 82d33d8686
commit 4e533cc63b
4 changed files with 33 additions and 75 deletions

View File

@@ -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');

View File

@@ -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',

View File

@@ -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) {

View File

@@ -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,