Branch data Line data Source code
1 : : // Copyright (c) 2021-2022 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 : : #include <interfaces/echo.h>
6 : : #include <interfaces/handler.h>
7 : :
8 : : #include <boost/signals2/connection.hpp>
9 : : #include <memory>
10 : : #include <utility>
11 : :
12 : : namespace common {
13 : : namespace {
14 : : class CleanupHandler : public interfaces::Handler
15 : : {
16 : : public:
17 : 0 : explicit CleanupHandler(std::function<void()> cleanup) : m_cleanup(std::move(cleanup)) {}
18 [ # # ]: 0 : ~CleanupHandler() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; }
19 [ # # ]: 0 : void disconnect() override { if (!m_cleanup) return; m_cleanup(); m_cleanup = nullptr; }
20 : : std::function<void()> m_cleanup;
21 : : };
22 : :
23 : : class SignalHandler : public interfaces::Handler
24 : : {
25 : : public:
26 [ # # ]: 0 : explicit SignalHandler(boost::signals2::connection connection) : m_connection(std::move(connection)) {}
27 : :
28 : 0 : void disconnect() override { m_connection.disconnect(); }
29 : :
30 : : boost::signals2::scoped_connection m_connection;
31 : : };
32 : :
33 : 0 : class EchoImpl : public interfaces::Echo
34 : : {
35 : : public:
36 : 0 : std::string echo(const std::string& echo) override { return echo; }
37 : : };
38 : : } // namespace
39 : : } // namespace common
40 : :
41 : : namespace interfaces {
42 : 0 : std::unique_ptr<Handler> MakeCleanupHandler(std::function<void()> cleanup)
43 : : {
44 : 0 : return std::make_unique<common::CleanupHandler>(std::move(cleanup));
45 : : }
46 : :
47 : 0 : std::unique_ptr<Handler> MakeSignalHandler(boost::signals2::connection connection)
48 : : {
49 : 0 : return std::make_unique<common::SignalHandler>(std::move(connection));
50 : : }
51 : :
52 : 0 : std::unique_ptr<Echo> MakeEcho() { return std::make_unique<common::EchoImpl>(); }
53 : : } // namespace interfaces
|