#ifndef DEVICEREATTACHER_H #define DEVICEREATTACHER_H #include #include #include #include namespace smo { class ComponentThread; namespace device { class DeviceManager; class DeviceReattacher { public: DeviceReattacher( DeviceManager& parent, std::shared_ptr ioThread); ~DeviceReattacher() = default; // Non-copyable DeviceReattacher(const DeviceReattacher&) = delete; DeviceReattacher& operator=(const DeviceReattacher&) = delete; // Control methods void start(); void stop(); private: void scheduleNextTimeout(); void onTimeout(const boost::system::error_code& error); DeviceManager &parent; std::shared_ptr ioThread; std::atomic shouldContinue; boost::asio::deadline_timer timer; }; } // namespace device } // namespace smo #endif // DEVICEREATTACHER_H