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