1 // Copyright (c) 2018-2019 The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #ifndef BITCOIN_INTERFACES_HANDLER_H 6 #define BITCOIN_INTERFACES_HANDLER_H 7 8 #include <functional> 9 #include <memory> 10 11 namespace boost { 12 namespace signals2 { 13 class connection; 14 } // namespace signals2 15 } // namespace boost 16 17 namespace interfaces { 18 19 //! Generic interface for managing an event handler or callback function 20 //! registered with another interface. Has a single disconnect method to cancel 21 //! the registration and prevent any future notifications. 22 class Handler 23 { 24 public: ~Handler()25 virtual ~Handler() {} 26 27 //! Disconnect the handler. 28 virtual void disconnect() = 0; 29 }; 30 31 //! Return handler wrapping a boost signal connection. 32 std::unique_ptr<Handler> MakeHandler(boost::signals2::connection connection); 33 34 //! Return handler wrapping a cleanup function. 35 std::unique_ptr<Handler> MakeHandler(std::function<void()> cleanup); 36 37 } // namespace interfaces 38 39 #endif // BITCOIN_INTERFACES_HANDLER_H 40