diff options
author | Mark Spruiell <mes@zeroc.com> | 2014-03-19 12:45:55 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2014-03-19 12:45:55 -0700 |
commit | cdcffbcc3c3c052afdeb772ff0167e7a90b525bb (patch) | |
tree | 4f16ee41ef7d33394c44e9db81e4d6cd89908250 /js/src/Ice/LocatorTable.js | |
parent | fixing testicedist.py for 5487 (diff) | |
download | ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.tar.bz2 ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.tar.xz ice-cdcffbcc3c3c052afdeb772ff0167e7a90b525bb.zip |
merging javascript branch
Diffstat (limited to 'js/src/Ice/LocatorTable.js')
-rw-r--r-- | js/src/Ice/LocatorTable.js | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/js/src/Ice/LocatorTable.js b/js/src/Ice/LocatorTable.js new file mode 100644 index 00000000000..e80465b5be9 --- /dev/null +++ b/js/src/Ice/LocatorTable.js @@ -0,0 +1,114 @@ +// ********************************************************************** +// +// 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/Debug"); + + var Ice = global.Ice || {}; + + var HashMap = Ice.HashMap; + var Debug = Ice.Debug; + + var LocatorTable = Ice.Class({ + __init__: function() + { + this._adapterEndpointsTable = new HashMap(); // Map<String, EndpointTableEntry> + this._objectTable = new HashMap(); // Map<Ice.Identity, ReferenceTableEntry> + this._objectTable.keyComparator = HashMap.compareEquals; + }, + clear: function() + { + this._adapterEndpointsTable.clear(); + this._objectTable.clear(); + }, + getAdapterEndpoints: function(adapter, ttl, cached) + { + if(ttl === 0) // Locator cache disabled. + { + cached.value = false; + return null; + } + + var entry = this._adapterEndpointsTable.get(adapter); + if(entry !== undefined) + { + cached.value = this.checkTTL(entry.time, ttl); + return entry.endpoints; + } + cached.value = false; + return null; + }, + addAdapterEndpoints: function(adapter, endpoints) + { + this._adapterEndpointsTable.set(adapter, new EndpointTableEntry(Date.now(), endpoints)); + }, + removeAdapterEndpoints: function(adapter) + { + var entry = this._adapterEndpointsTable.get(adapter); + this._adapterEndpointsTable.delete(adapter); + return entry !== undefined ? entry.endpoints : null; + }, + getObjectReference: function(id, ttl, cached) + { + if(ttl === 0) // Locator cache disabled. + { + cached.value = false; + return null; + } + + var entry = this._objectTable.get(id); + if(entry !== undefined) + { + cached.value = this.checkTTL(entry.time, ttl); + return entry.reference; + } + cached.value = false; + return null; + }, + addObjectReference: function(id, ref) + { + this._objectTable.set(id, new ReferenceTableEntry(Date.now(), ref)); + }, + removeObjectReference: function(id) + { + var entry = this._objectTable.get(id); + this._objectTable.delete(id); + return entry !== undefined ? entry.reference : null; + }, + checkTTL: function(time, ttl) + { + Debug.assert(ttl !== 0); + if(ttl < 0) // TTL = infinite + { + return true; + } + else + { + return Date.now() - time <= (ttl * 1000); + } + } + }); + + Ice.LocatorTable = LocatorTable; + global.Ice = Ice; + + var EndpointTableEntry = function(time, endpoints) + { + this.time = time; + this.endpoints = endpoints; + }; + + var ReferenceTableEntry = function(time, reference) + { + this.time = time; + this.reference = reference; + }; +}(typeof (global) === "undefined" ? window : global)); |