All files / src/Ice LocatorManager.js

100% Statements 60/60
100% Branches 11/11
100% Functions 3/3
100% Lines 60/60

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 6141x 41x 41x 41x 41x 41x 41x 41x 41x 41x 67x 67x 67x 67x 41x 41x 65x 8x 8x 65x 65x 65x 41x 41x 41x 41x 41x 41x 314x 159x 159x 155x 155x 155x 155x 155x 155x 155x 155x 155x 155x 314x 8x 8x 8x 8x 8x 8x 8x 6x 6x 6x 8x 8x 8x 8x 155x 155x 314x 41x  
// Copyright (c) ZeroC, Inc.
 
import { HashMap } from "./HashMap.js";
import { LocatorInfo } from "./LocatorInfo.js";
import { Ice as Ice_Locator } from "./Locator.js";
const { LocatorPrx } = Ice_Locator;
import { LocatorTable } from "./LocatorTable.js";
 
export class LocatorManager {
    constructor(properties) {
        this._background = properties.getIcePropertyAsInt("Ice.BackgroundLocatorCacheUpdates") > 0;
        this._table = new HashMap(HashMap.compareEquals); // Map<Ice.LocatorPrx, LocatorInfo>
        this._locatorTables = new HashMap(HashMap.compareEquals); // Map<Ice.Identity, LocatorTable>
    }
 
    destroy() {
        for (const locator of this._table.values()) {
            locator.destroy();
        }
        this._table.clear();
        this._locatorTables.clear();
    }
 
    //
    // Returns locator info for a given locator. Automatically creates
    // the locator info if it doesn't exist yet.
    //
    find(loc) {
        if (loc === null) {
            return null;
        }
 
        //
        // The locator can't be located.
        //
        const locator = LocatorPrx.uncheckedCast(loc.ice_locator(null));
 
        //
        // TODO: reap unused locator info objects?
        //
        let info = this._table.get(locator);
        if (info === undefined) {
            //
            // Rely on locator identity for the adapter table. We want to
            // have only one table per locator (not one per locator
            // proxy).
            //
            let table = this._locatorTables.get(locator.ice_getIdentity());
            if (table === undefined) {
                table = new LocatorTable();
                this._locatorTables.set(locator.ice_getIdentity(), table);
            }
 
            info = new LocatorInfo(locator, table, this._background);
            this._table.set(locator, info);
        }
 
        return info;
    }
}