diff options
Diffstat (limited to 'js/src/Ice/RouterManager.js')
-rw-r--r-- | js/src/Ice/RouterManager.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/js/src/Ice/RouterManager.js b/js/src/Ice/RouterManager.js new file mode 100644 index 00000000000..74156908bdd --- /dev/null +++ b/js/src/Ice/RouterManager.js @@ -0,0 +1,77 @@ +// ********************************************************************** +// +// 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/HashMap"); + require("Ice/RouterInfo"); + require("Ice/Router"); + + var Ice = global.Ice || {}; + + var HashMap = Ice.HashMap; + var RouterInfo = Ice.RouterInfo; + var RouterPrx = Ice.RouterPrx; + + var RouterManager = Ice.Class({ + __init__: function() + { + this._table = new HashMap(); // Map<Ice.RouterPrx, RouterInfo> + this._table.keyComparator = HashMap.compareEquals; + }, + destroy: function() + { + for(var e = this._table.entries; e !== null; e = e.next) + { + e.value.destroy(); + } + this._table.clear(); + }, + // + // Returns router info for a given router. Automatically creates + // the router info if it doesn't exist yet. + // + find: function(rtr) + { + if(rtr === null) + { + return null; + } + + // + // The router cannot be routed. + // + var router = RouterPrx.uncheckedCast(rtr.ice_router(null)); + + var info = this._table.get(router); + if(info === undefined) + { + info = new RouterInfo(router); + this._table.set(router, info); + } + + return info; + }, + erase: function(rtr) + { + var info = null; + if(rtr !== null) + { + // The router cannot be routed. + var router = RouterPrx.uncheckedCast(rtr.ice_router(null)); + + info = this._table.get(router); + this._table.delete(router); + } + return info; + } + }); + Ice.RouterManager = RouterManager; + global.Ice = Ice; +}(typeof (global) === "undefined" ? window : global)); |