Bitcoin Core  21.99.0
P2P Digital Currency
ipc.h
Go to the documentation of this file.
1 // Copyright (c) 2021 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_IPC_H
6 #define BITCOIN_INTERFACES_IPC_H
7 
8 #include <functional>
9 #include <memory>
10 #include <typeindex>
11 
12 namespace interfaces {
13 class Init;
14 
40 class Ipc
41 {
42 public:
43  virtual ~Ipc() = default;
44 
46  virtual std::unique_ptr<Init> spawnProcess(const char* exe_name) = 0;
47 
51  virtual bool startSpawnedProcess(int argc, char* argv[], int& exit_status) = 0;
52 
55  template<typename Interface>
56  void addCleanup(Interface& iface, std::function<void()> cleanup)
57  {
58  addCleanup(typeid(Interface), &iface, std::move(cleanup));
59  }
60 
61 protected:
64  virtual void addCleanup(std::type_index type, void* iface, std::function<void()> cleanup) = 0;
65 };
66 
68 std::unique_ptr<Ipc> MakeIpc(const char* exe_name, const char* process_argv0, Init& init);
69 } // namespace interfaces
70 
71 #endif // BITCOIN_INTERFACES_IPC_H
interfaces
Definition: dummywallet.cpp:10
interfaces::MakeIpc
std::unique_ptr< Ipc > MakeIpc(const char *exe_name, const char *process_argv0, Init &init)
Return implementation of Ipc interface.
Definition: interfaces.cpp:73
interfaces::Ipc::addCleanup
void addCleanup(Interface &iface, std::function< void()> cleanup)
Add cleanup callback to remote interface that will run when the interface is deleted.
Definition: ipc.h:56
interfaces::Ipc::startSpawnedProcess
virtual bool startSpawnedProcess(int argc, char *argv[], int &exit_status)=0
If this is a spawned process, block and handle requests from the parent process by forwarding them to...
init
Definition: bitcoin-node.cpp:12
interfaces::Ipc::spawnProcess
virtual std::unique_ptr< Init > spawnProcess(const char *exe_name)=0
Spawn a child process returning pointer to its Init interface.
interfaces::Ipc::~Ipc
virtual ~Ipc()=default
interfaces::Ipc
Interface providing access to interprocess-communication (IPC) functionality.
Definition: ipc.h:40