7#include <ipc/capnp/init.capnp.h>
8#include <ipc/capnp/init.capnp.proxy.h>
26#include <sys/socket.h>
27#include <system_error>
34mp::Log GetRequestedIPCLogLevel()
45 switch (message.
level) {
63 throw Exception(message.
message);
71class CapnpProtocol :
public Protocol
74 ~CapnpProtocol() noexcept(true)
80 std::unique_ptr<interfaces::Init> connect(
int fd,
const char* exe_name)
override
83 return mp::ConnectStream<messages::Init>(*
m_loop, fd);
88 if (::listen(listen_fd, 5) != 0) {
89 throw std::system_error(errno, std::system_category());
91 mp::ListenConnections<messages::Init>(*
m_loop, listen_fd,
init);
93 void serve(
int fd,
const char* exe_name,
interfaces::Init&
init,
const std::function<
void()>& ready_fn = {})
override
99 .log_level = GetRequestedIPCLogLevel()
102 if (ready_fn) ready_fn();
103 mp::ServeStream<messages::Init>(*
m_loop, fd,
init);
108 void disconnectIncoming()
override
118 void addCleanup(std::type_index type,
void* iface, std::function<
void()> cleanup)
override
122 Context& context()
override {
return m_context; }
123 void startLoop(
const char* exe_name)
126 std::promise<void> promise;
131 .log_level = GetRequestedIPCLogLevel()
139 promise.get_future().wait();
Initial interface created when a process is first started, and used to give and get access to other i...
Object holding network & rpc state associated with either an incoming server connection,...
std::thread m_loop_thread
mp::Connection * m_parent_connection
Connection to parent, if this is a child process spawned by a parent process.
std::optional< mp::EventLoop > m_loop
EventLoop object which manages I/O events for all connections.
std::optional< mp::EventLoopRef > m_loop_ref
Reference to the same EventLoop.
#define LogTrace(category,...)
#define LogDebug(category,...)
std::unique_ptr< Protocol > MakeCapnpProtocol()
std::string ThreadName(const char *exe_name)
Format current thread name as "{exe_name}-{$pid}/{thread_name}-{$tid}".
thread_local ThreadContext g_thread_context
Log
Log flags. Update stringify function if changed!
bool ShouldDebugLog(Category category)
Return whether messages with specified category should be debug logged.
bool ShouldTraceLog(Category category)
Return whether messages with specified category should be trace logged.
void ThreadRename(const std::string &)
Rename a thread both in terms of an internal (in-memory) name as well as its system thread name.
Log level
The severity level of this message.
std::string message
Message to be logged.
LogFn log_fn
External logging callback.
std::string thread_name
Identifying string for debug.