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 : 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