nodemanager/core/NamingClient.h (43 lines of code) (raw):

#ifndef NAMINGCLIENT_H #define NAMINGCLIENT_H #include <cpprest/json.h> #include <cpprest/http_client.h> #include <functional> #include "../utils/WriterLock.h" namespace hpc { namespace core { using namespace web; using namespace hpc::utils; class NamingClient { public: NamingClient( const std::vector<std::string>& namingServices, int interval) : intervalSeconds(interval), namingServicesUri(namingServices), lock(PTHREAD_RWLOCK_INITIALIZER) { } virtual ~NamingClient() { this->cts.cancel(); pthread_rwlock_destroy(&this->lock); } static std::shared_ptr<NamingClient> GetInstance(const std::vector<std::string>& namingServices) { static std::shared_ptr<NamingClient> instance = std::make_shared<NamingClient>(namingServices, 1); return instance; } std::string GetServiceLocation(const std::string& serviceName, pplx::cancellation_token token); static void InvalidateCache(); private: void RequestForServiceLocation(const std::string& serviceName, std::string& serviceLocation, pplx::cancellation_token token); int intervalSeconds; std::map<std::string, std::string> serviceLocations; std::vector<std::string> namingServicesUri; pplx::cancellation_token_source cts; pthread_rwlock_t lock; }; } } #endif // NAMINGCLIENT_H