/** * Public constructor. */ GridClientImpl::GridClientImpl(const GridClientConfiguration& cfg, std::shared_ptr<GridClientCommandExecutorPrivate>& exec) : sharedData(new GridClientSharedData(cfg.protocolConfiguration().uuid(), cfg, exec)) ,topRefresher(new GridClientTopologyRefresher(cfg.topologyRefreshFrequency(), *this)) ,threadPool(new GridThreadPool(cfg.threadPoolSize())) { // Check configuration sanity if (!cfg.servers().empty() && !cfg.routers().empty()) throw GridClientException("Both servers and routers are specified in configuration, which is not allowed."); TGridClientTopologyListenerList topLsnrs = cfg.topologyListeners(); for (auto i = topLsnrs.begin(); i != topLsnrs.end(); i++) addTopologyListener(*i); // Refresh the topology based on new data. refreshTopology(); }