/* * Copyright (c) 2011 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include #include #include #include #include namespace Swift { class Connection; class Connector; class ConnectionFactory; class TimerFactory; class DomainNameResolver; class ChainedConnector { public: ChainedConnector(const std::string& hostname, DomainNameResolver*, const std::vector&, TimerFactory*); void setTimeoutMilliseconds(int milliseconds); void start(); void stop(); boost::signal)> onConnectFinished; private: void finish(boost::shared_ptr connection); void tryNextConnectionFactory(); void handleConnectorFinished(boost::shared_ptr); private: std::string hostname; DomainNameResolver* resolver; std::vector connectionFactories; TimerFactory* timerFactory; int timeoutMilliseconds; std::deque connectionFactoryQueue; boost::shared_ptr currentConnector; }; };