From cdcffbcc3c3c052afdeb772ff0167e7a90b525bb Mon Sep 17 00:00:00 2001 From: Mark Spruiell Date: Wed, 19 Mar 2014 12:45:55 -0700 Subject: merging javascript branch --- js/src/Ice/ObjectAdapterFactory.js | 150 +++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 js/src/Ice/ObjectAdapterFactory.js (limited to 'js/src/Ice/ObjectAdapterFactory.js') diff --git a/js/src/Ice/ObjectAdapterFactory.js b/js/src/Ice/ObjectAdapterFactory.js new file mode 100644 index 00000000000..8fe50d5d872 --- /dev/null +++ b/js/src/Ice/ObjectAdapterFactory.js @@ -0,0 +1,150 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +(function(global){ + require("Ice/Class"); + require("Ice/AsyncResultBase"); + require("Ice/LocalException"); + require("Ice/ObjectAdapterI"); + require("Ice/Promise"); + require("Ice/UUID"); + + var Ice = global.Ice || {}; + + var AsyncResultBase = Ice.AsyncResultBase; + var ObjectAdapterI = Ice.ObjectAdapterI; + var Promise = Ice.Promise; + var UUID = Ice.UUID; + + // + // Only for use by Instance. + // + var ObjectAdapterFactory = Ice.Class({ + __init__: function(instance, communicator) + { + this._instance = instance; + this._communicator = communicator; + this._adapters = []; + this._adapterNamesInUse = []; + this._shutdownPromise = new Promise(); + }, + shutdown: function() + { + // + // Ignore shutdown requests if the object adapter factory has + // already been shut down. + // + if(this._instance === null) + { + return this._shutdownPromise; + } + + this._instance = null; + this._communicator = null; + var self = this; + Promise.all( + this._adapters.map(function(adapter) + { + return adapter.deactivate(); + }) + ).then( + function() + { + self._shutdownPromise.succeed(); + }, + function(ex) + { + self._shutdownPromise.fail(ex); + } + ); + return this._shutdownPromise; + }, + waitForShutdown: function() + { + var self = this; + return this._shutdownPromise.then( + function() + { + return Promise.all(self._adapters.map(function(adapter) + { + return adapter.waitForDeactivate(); + })); + }); + }, + isShutdown: function() + { + return this._instance === null; + }, + destroy: function() + { + var self = this; + return this.waitForShutdown().then( + function() + { + return Promise.all(self._adapters.map(function(adapter) + { + return adapter.destroy(); + })); + }); + }, + createObjectAdapter: function(name, router, promise) + { + if(this._instance === null) + { + throw new Ice.ObjectAdapterDeactivatedException(); + } + + var adapter = null; + try + { + if(name.length === 0) + { + var uuid = UUID.generateUUID(); + adapter = new ObjectAdapterI(this._instance, this._communicator, this, uuid, null, true, promise); + } + else + { + if(this._adapterNamesInUse.indexOf(name) !== -1) + { + throw new Ice.AlreadyRegisteredException("object adapter", name); + } + adapter = new ObjectAdapterI(this._instance, this._communicator, this, name, router, false, promise); + this._adapterNamesInUse.push(name); + } + this._adapters.push(adapter); + } + catch(ex) + { + promise.fail(ex, promise); + } + }, + removeObjectAdapter: function(adapter) + { + if(this._instance === null) + { + return; + } + + var n = this._adapters.indexOf(adapter); + if(n !== -1) + { + this._adapters.splice(n, 1); + } + + n = this._adapterNamesInUse.indexOf(adapter.getName()); + if(n !== -1) + { + this._adapterNamesInUse.splice(n, 1); + } + } + }); + + Ice.ObjectAdapterFactory = ObjectAdapterFactory; + global.Ice = Ice; +}(typeof (global) === "undefined" ? window : global)); -- cgit v1.2.3