Interface providing access to interprocess-communication (IPC) functionality.
More...
#include <ipc.h>
|
virtual | ~Ipc ()=default |
|
virtual std::unique_ptr< Init > | spawnProcess (const char *exe_name)=0 |
| Spawn a child process returning pointer to its Init interface. More...
|
|
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 this process's Init interface, then return true. More...
|
|
template<typename Interface > |
void | addCleanup (Interface &iface, std::function< void()> cleanup) |
| Add cleanup callback to remote interface that will run when the interface is deleted. More...
|
|
virtual ipc::Context & | context ()=0 |
| IPC context struct accessor (see struct definition for more description). More...
|
|
|
virtual void | addCleanup (std::type_index type, void *iface, std::function< void()> cleanup)=0 |
| Internal implementation of public addCleanup method (above) as a type-erased virtual function, since template functions can't be virtual. More...
|
|
Interface providing access to interprocess-communication (IPC) functionality.
The IPC implementation is responsible for establishing connections between a controlling process and a process being controlled. When a connection is established, the process being controlled returns an interfaces::Init pointer to the controlling process, which the controlling process can use to get access to other interfaces and functionality.
When spawning a new process, the steps are:
- The controlling process calls interfaces::Ipc::spawnProcess(), which calls ipc::Process::spawn(), which spawns a new process and returns a socketpair file descriptor for communicating with it. interfaces::Ipc::spawnProcess() then calls ipc::Protocol::connect() passing the socketpair descriptor, which returns a local proxy interfaces::Init implementation calling remote interfaces::Init methods.
- The spawned process calls interfaces::Ipc::startSpawnProcess(), which calls ipc::Process::checkSpawned() to read command line arguments and determine whether it is a spawned process and what socketpair file descriptor it should use. It then calls ipc::Protocol::serve() to handle incoming requests from the socketpair and invoke interfaces::Init interface methods, and exit when the socket is closed.
- The controlling process calls local proxy interfaces::Init object methods to make other proxy objects calling other remote interfaces. It can also destroy the initial interfaces::Init object to close the connection and shut down the spawned process.
Definition at line 44 of file ipc.h.
◆ ~Ipc()
virtual interfaces::Ipc::~Ipc |
( |
| ) |
|
|
virtualdefault |
◆ addCleanup() [1/2]
template<typename Interface >
void interfaces::Ipc::addCleanup |
( |
Interface & |
iface, |
|
|
std::function< void()> |
cleanup |
|
) |
| |
|
inline |
Add cleanup callback to remote interface that will run when the interface is deleted.
Definition at line 60 of file ipc.h.
◆ addCleanup() [2/2]
virtual void interfaces::Ipc::addCleanup |
( |
std::type_index |
type, |
|
|
void * |
iface, |
|
|
std::function< void()> |
cleanup |
|
) |
| |
|
protectedpure virtual |
Internal implementation of public addCleanup method (above) as a type-erased virtual function, since template functions can't be virtual.
◆ context()
IPC context struct accessor (see struct definition for more description).
◆ spawnProcess()
virtual std::unique_ptr<Init> interfaces::Ipc::spawnProcess |
( |
const char * |
exe_name | ) |
|
|
pure virtual |
Spawn a child process returning pointer to its Init interface.
◆ startSpawnedProcess()
virtual bool interfaces::Ipc::startSpawnedProcess |
( |
int |
argc, |
|
|
char * |
argv[], |
|
|
int & |
exit_status |
|
) |
| |
|
pure virtual |
If this is a spawned process, block and handle requests from the parent process by forwarding them to this process's Init interface, then return true.
If this is not a spawned child process, return false.
The documentation for this class was generated from the following file: