// // Copyright (c) ZeroC, Inc. All rights reserved. // #ifndef ICE_GRID_LOCATOR_I_H #define ICE_GRID_LOCATOR_I_H #include #include #include namespace IceGrid { class Database; class LocatorI; class TraceLevels; class WellKnownObjectsManager; struct LocatorAdapterInfo; typedef std::vector LocatorAdapterInfoSeq; class LocatorI : public Locator, public std::enable_shared_from_this { public: class Request : public std::enable_shared_from_this { public: virtual void execute() = 0; virtual void activating(const std::string&) = 0; virtual void response(const std::string&, const std::shared_ptr&) = 0; virtual void exception(const std::string&, std::exception_ptr) = 0; }; LocatorI(const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&, const std::shared_ptr&); void findObjectByIdAsync(Ice::Identity, std::function&)>, std::function, const Ice::Current&) const override; void findAdapterByIdAsync(std::string, std::function&)>, std::function, const Ice::Current&) const override; std::shared_ptr getRegistry(const Ice::Current&) const override; std::shared_ptr getLocalRegistry(const Ice::Current&) const override; std::shared_ptr getLocalQuery(const Ice::Current&) const override; const std::shared_ptr& getCommunicator() const; const std::shared_ptr& getTraceLevels() const; bool getDirectProxy(const LocatorAdapterInfo&, const std::shared_ptr&); void getDirectProxyResponse(const LocatorAdapterInfo&, const std::shared_ptr&); void getDirectProxyException(const LocatorAdapterInfo&, std::exception_ptr); protected: const std::shared_ptr _communicator; const std::shared_ptr _database; const std::shared_ptr _wellKnownObjects; const std::shared_ptr _localRegistry; const std::shared_ptr _localQuery; using PendingRequests = std::vector>; using PendingRequestsMap = std::map; PendingRequestsMap _pendingRequests; std::set _activating; std::mutex _mutex; }; } #endif