mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-08 06:01:22 +00:00
GUAC-963: Remove managed client when view is destroyed if client is no longer connected.
This commit is contained in:
@@ -709,6 +709,21 @@ angular.module('client').controller('clientController', ['$scope', '$routeParams
|
|||||||
// Clean up when view destroyed
|
// Clean up when view destroyed
|
||||||
$scope.$on('$destroy', function clientViewDestroyed() {
|
$scope.$on('$destroy', function clientViewDestroyed() {
|
||||||
|
|
||||||
|
// Remove client from client manager if no longer connected
|
||||||
|
var managedClient = $scope.client;
|
||||||
|
if (managedClient) {
|
||||||
|
|
||||||
|
// Get current connection state
|
||||||
|
var connectionState = managedClient.clientState.connectionState;
|
||||||
|
|
||||||
|
// If disconnected, remove from management
|
||||||
|
if (connectionState === ManagedClientState.ConnectionState.DISCONNECTED
|
||||||
|
|| connectionState === ManagedClientState.ConnectionState.TUNNEL_ERROR
|
||||||
|
|| connectionState === ManagedClientState.ConnectionState.CLIENT_ERROR)
|
||||||
|
guacClientManager.removeManagedClient(managedClient.id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Hide any status dialog
|
// Hide any status dialog
|
||||||
$scope.showStatus(false);
|
$scope.showStatus(false);
|
||||||
|
|
||||||
|
@@ -36,6 +36,36 @@ angular.module('client').factory('guacClientManager', ['ManagedClient',
|
|||||||
*/
|
*/
|
||||||
service.managedClients = {};
|
service.managedClients = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the existing ManagedClient associated with the connection having
|
||||||
|
* the given ID, if any. If no such a ManagedClient already exists, this
|
||||||
|
* function has no effect.
|
||||||
|
*
|
||||||
|
* @param {String} id
|
||||||
|
* The ID of the connection whose ManagedClient should be removed.
|
||||||
|
*
|
||||||
|
* @returns {Boolean}
|
||||||
|
* true if an existing client was removed, false otherwise.
|
||||||
|
*/
|
||||||
|
service.removeManagedClient = function replaceManagedClient(id) {
|
||||||
|
|
||||||
|
// Remove client if it exists
|
||||||
|
if (id in service.managedClients) {
|
||||||
|
|
||||||
|
// Disconnect and remove
|
||||||
|
service.managedClients[id].client.disconnect();
|
||||||
|
delete service.managedClients[id];
|
||||||
|
|
||||||
|
// A client was removed
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// No client was removed
|
||||||
|
return false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new ManagedClient associated with the connection having the
|
* Creates a new ManagedClient associated with the connection having the
|
||||||
* given ID. If such a ManagedClient already exists, it is disconnected and
|
* given ID. If such a ManagedClient already exists, it is disconnected and
|
||||||
@@ -56,8 +86,7 @@ angular.module('client').factory('guacClientManager', ['ManagedClient',
|
|||||||
service.replaceManagedClient = function replaceManagedClient(id, connectionParameters) {
|
service.replaceManagedClient = function replaceManagedClient(id, connectionParameters) {
|
||||||
|
|
||||||
// Disconnect any existing client
|
// Disconnect any existing client
|
||||||
if (id in service.managedClients)
|
service.removeManagedClient(id);
|
||||||
service.managedClients[id].client.disconnect();
|
|
||||||
|
|
||||||
// Set new client
|
// Set new client
|
||||||
return service.managedClients[id] = ManagedClient.getInstance(id, connectionParameters);
|
return service.managedClients[id] = ManagedClient.getInstance(id, connectionParameters);
|
||||||
|
Reference in New Issue
Block a user