#ifndef RTNET_SDO_EXAMPLE_CONNECTIONSTATUSMONITOR_H #define RTNET_SDO_EXAMPLE_CONNECTIONSTATUSMONITOR_H #include <transport/TTransport.h> #include <concurrency/TimerManager.h> #include <set> //#include <cstdatomic> // needs newer version of g++ using C++0x #include <boost/detail/atomic_count.hpp> class ConnectionRequiredRunnable; class ConnectionStatusMonitor { public: ConnectionStatusMonitor(boost::shared_ptr<apache::thrift::transport::TTransport>& transport, boost::shared_ptr<apache::thrift::concurrency::TimerManager>& timeMgr); ~ConnectionStatusMonitor(); void addListener(boost::shared_ptr<ConnectionRequiredRunnable> listener); void disconnected(const ConnectionRequiredRunnable* noticer); void tryOpen(); void stop(); bool connected(); private: class Reconnect : public apache::thrift::concurrency::Runnable { public: Reconnect(ConnectionStatusMonitor* parent) : parent_(parent) {} void run() { parent_->tryOpen(); } private: ConnectionStatusMonitor* parent_; }; std::set<boost::shared_ptr<ConnectionRequiredRunnable> > listeners_; boost::shared_ptr<apache::thrift::transport::TTransport> transport_; boost::shared_ptr<apache::thrift::concurrency::TimerManager> timeMgr_; boost::shared_ptr<apache::thrift::concurrency::ThreadFactory> thFactory_; //std::atomic<bool> connected_; //boost::atomic<bool> connected_; // need a higher version of boost or gcc than is available on kurenai boost::detail::atomic_count connected_; // need a higher version of boost or gcc than is available on kurenai }; #endif // RTNET_SDO_EXAMPLE_CONNECTIONSTATUSMONITOR_H