// ********************************************************************** // // Copyright (c) 2001 // Mutable Realms, Inc. // Huntsville, AL, USA // // All Rights Reserved // // ********************************************************************** #ifndef ICE_LOCATOR_INFO_H #define ICE_LOCATOR_INFO_H #include #include #include #include #include #include namespace IceInternal { class LocatorManager : public ::IceUtil::Shared, public ::IceUtil::Mutex { public: LocatorManager(); void destroy(); // // Returns locator info for a given locator. Automatically creates // the locator info if it doesn't exist yet. // LocatorInfoPtr get(const ::Ice::LocatorPrx&); private: std::map< ::Ice::LocatorPrx, LocatorInfoPtr> _table; std::map< ::Ice::LocatorPrx, LocatorInfoPtr>::iterator _tableHint; std::map< ::Ice::Identity, LocatorAdapterTablePtr> _adapterTables; }; class LocatorAdapterTable : public ::IceUtil::Shared, public ::IceUtil::Mutex { public: LocatorAdapterTable(); bool get(const std::string&, ::std::vector&) const; void add(const std::string&, const ::std::vector&); ::std::vector remove(const std::string&); private: std::map > _adapterEndpointsMap; }; class LocatorInfo : public ::IceUtil::Shared, public ::IceUtil::Mutex { public: LocatorInfo(const ::Ice::LocatorPrx&, const LocatorAdapterTablePtr&); bool operator==(const LocatorInfo&) const; bool operator!=(const LocatorInfo&) const; bool operator<(const LocatorInfo&) const; ::Ice::LocatorPrx getLocator() const; ::Ice::LocatorRegistryPrx getLocatorRegistry(); std::vector getEndpoints(const ReferencePtr&, bool&); void clearCache(const ReferencePtr&); private: ::Ice::LocatorPrx _locator; ::Ice::LocatorRegistryPrx _locatorRegistry; LocatorAdapterTablePtr _adapterTable; }; } #endif