53 std::string req_name =
base_name_ +
"_request";
54 std::string resp_name =
base_name_ +
"_response";
80 if (
request_ring_->wait_for_data(
sizeof(uint32_t),
static_cast<uint32_t
>(timeout_ns))) {
95 void release([[maybe_unused]]
int client_id,
size_t message_size)
override
103 bool send([[maybe_unused]]
int client_id,
const void*
data,
size_t len)
override
118 std::string req_name =
base_name_ +
"_request";
119 std::string resp_name =
base_name_ +
"_response";
Abstract interface for IPC server.
IPC server implementation using shared memory.
void close() override
Close the server and all client connections.
ShmServer(std::string base_name, size_t request_ring_size=DEFAULT_RING_SIZE, size_t response_ring_size=DEFAULT_RING_SIZE)
int wait_for_data(uint64_t timeout_ns) override
Wait for data from any connected client.
ShmServer(const ShmServer &)=delete
std::span< const uint8_t > receive(int client_id) override
Receive next message from a specific client.
std::optional< SpscShm > request_ring_
void wakeup_all() override
Wake all blocked threads (for graceful shutdown)
ShmServer & operator=(const ShmServer &)=delete
size_t request_ring_size_
static constexpr size_t DEFAULT_RING_SIZE
ShmServer & operator=(ShmServer &&)=delete
bool send(int client_id, const void *data, size_t len) override
Send a message to a specific client.
void release(int client_id, size_t message_size) override
Release/consume the previously received message.
std::optional< SpscShm > response_ring_
size_t response_ring_size_
bool listen() override
Start listening for client connections.
ShmServer(ShmServer &&)=delete
static bool unlink(const std::string &name)
Unlink shared memory object (cleanup after close)
static SpscShm create(const std::string &name, size_t min_capacity)
Create a new SPSC ring buffer.
const std::vector< MemoryValue > data
bool ring_send_msg(SpscShm &ring, const void *data, size_t len, uint64_t timeout_ns)
std::span< const uint8_t > ring_receive_msg(SpscShm &ring, uint64_t timeout_ns)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Single-producer/single-consumer shared-memory ring buffer (Linux, x86-64 optimized)