diff --git a/guacamole/src/main/webapp/app/client/services/guacClientManager.js b/guacamole/src/main/webapp/app/client/services/guacClientManager.js index 81dc249fb..3d74bc2ea 100644 --- a/guacamole/src/main/webapp/app/client/services/guacClientManager.js +++ b/guacamole/src/main/webapp/app/client/services/guacClientManager.js @@ -30,18 +30,34 @@ angular.module('client').factory('guacClientManager', ['$injector', var ManagedClient = $injector.get('ManagedClient'); // Required services - var $window = $injector.get('$window'); - var $rootScope = $injector.get('$rootScope'); + var $window = $injector.get('$window'); + var sessionStorageFactory = $injector.get('sessionStorageFactory'); var service = {}; /** - * Map of all active managed clients. Each key is the ID of the connection - * used by that client. + * Getter/setter which retrieves or sets the map of all active managed + * clients. Each key is the ID of the connection used by that client. * - * @type Object. + * @type Function */ - service.managedClients = {}; + var storedManagedClients = sessionStorageFactory.create({}, function destroyClientStorage() { + + // Disconnect all clients when storage is destroyed + service.clear(); + + }); + + /** + * Returns a map of all active managed clients. Each key is the ID of the + * connection used by that client. + * + * @returns {Object.} + * A map of all active managed clients. + */ + service.getManagedClients = function getManagedClients() { + return storedManagedClients(); + }; /** * Removes the existing ManagedClient associated with the connection having @@ -55,13 +71,15 @@ angular.module('client').factory('guacClientManager', ['$injector', * true if an existing client was removed, false otherwise. */ service.removeManagedClient = function replaceManagedClient(id) { - + + var managedClients = storedManagedClients(); + // Remove client if it exists - if (id in service.managedClients) { + if (id in managedClients) { // Disconnect and remove - service.managedClients[id].client.disconnect(); - delete service.managedClients[id]; + managedClients[id].client.disconnect(); + delete managedClients[id]; // A client was removed return true; @@ -96,7 +114,7 @@ angular.module('client').factory('guacClientManager', ['$injector', service.removeManagedClient(id); // Set new client - return service.managedClients[id] = ManagedClient.getInstance(id, connectionParameters); + return storedManagedClients()[id] = ManagedClient.getInstance(id, connectionParameters); }; @@ -119,12 +137,14 @@ angular.module('client').factory('guacClientManager', ['$injector', */ service.getManagedClient = function getManagedClient(id, connectionParameters) { + var managedClients = storedManagedClients(); + // Create new managed client if it doesn't already exist - if (!(id in service.managedClients)) - service.managedClients[id] = ManagedClient.getInstance(id, connectionParameters); + if (!(id in managedClients)) + managedClients[id] = ManagedClient.getInstance(id, connectionParameters); // Return existing client - return service.managedClients[id]; + return managedClients[id]; }; @@ -133,23 +153,20 @@ angular.module('client').factory('guacClientManager', ['$injector', */ service.clear = function clear() { + var managedClients = storedManagedClients(); + // Disconnect each managed client - for (var id in service.managedClients) - service.managedClients[id].client.disconnect(); + for (var id in managedClients) + managedClients[id].client.disconnect(); // Clear managed clients - service.managedClients = {}; + storedManagedClients({}); }; // Disconnect all clients when window is unloaded $window.addEventListener('unload', service.clear); - // Clear clients on logout - $rootScope.$on('guacLogout', function handleLogout() { - service.clear(); - }); - return service; }]); diff --git a/guacamole/src/main/webapp/app/home/directives/guacRecentConnections.js b/guacamole/src/main/webapp/app/home/directives/guacRecentConnections.js index 3b7f522ce..5dddd9717 100644 --- a/guacamole/src/main/webapp/app/home/directives/guacRecentConnections.js +++ b/guacamole/src/main/webapp/app/home/directives/guacRecentConnections.js @@ -137,11 +137,13 @@ angular.module('home').directive('guacRecentConnections', [function guacRecentCo if (rootGroup) addVisibleConnectionGroup(rootGroup); + var managedClients = guacClientManager.getManagedClients(); + // Add all active connections - for (var id in guacClientManager.managedClients) { + for (var id in managedClients) { // Get corresponding managed client - var client = guacClientManager.managedClients[id]; + var client = managedClients[id]; // Add active connections for clients with associated visible objects if (id in visibleObjects) { @@ -157,7 +159,7 @@ angular.module('home').directive('guacRecentConnections', [function guacRecentCo guacHistory.recentConnections.forEach(function addRecentConnection(historyEntry) { // Add recent connections for history entries with associated visible objects - if (historyEntry.id in visibleObjects && !(historyEntry.id in guacClientManager.managedClients)) { + if (historyEntry.id in visibleObjects && !(historyEntry.id in managedClients)) { var object = visibleObjects[historyEntry.id]; $scope.recentConnections.push(new RecentConnection(object.name, historyEntry));