23 auto* original_cout_buf =
std::cout.rdbuf();
25 std::ostream stdout_stream(original_cout_buf);
33 auto handler = bb::bbapi::make_bb_handler(request);
35 while (!input_stream.eof()) {
37 input_stream.read(
reinterpret_cast<char*
>(&length),
sizeof(length));
38 if (input_stream.gcount() !=
sizeof(length)) {
42 std::vector<uint8_t>
buffer(length);
45 std::cerr <<
"Error: Incomplete msgpack buffer read" <<
'\n';
50 std::vector<uint8_t> response = handler(
buffer);
52 uint32_t response_length =
static_cast<uint32_t
>(response.size());
53 stdout_stream.write(
reinterpret_cast<const char*
>(&response_length),
sizeof(response_length));
54 stdout_stream.write(
reinterpret_cast<const char*
>(response.data()),
56 stdout_stream.flush();
93 [[maybe_unused]]
int max_clients,
94 [[maybe_unused]]
size_t request_ring_size,
95 [[maybe_unused]]
size_t response_ring_size)
97#if !defined(__wasm__) && !defined(_WIN32)
98 if (!msgpack_input_file.empty()) {
99 ipc::ServerOptions opts{
100 .max_shm_clients =
static_cast<std::size_t>(max_clients),
101 .shm_request_ring_size = request_ring_size,
102 .shm_response_ring_size = response_ring_size,
103 .socket_backlog = max_clients,
105 auto server = ipc::make_server(msgpack_input_file, opts);
107 std::cerr <<
"IPC server at " << msgpack_input_file <<
'\n';
114 std::istream* input_stream = &
std::cin;
115 std::ifstream file_stream;
117 if (!msgpack_input_file.empty()) {
118 file_stream.open(msgpack_input_file, std::ios::binary);
119 if (!file_stream.is_open()) {
120 std::cerr <<
"Error: Could not open input file: " << msgpack_input_file <<
'\n';
123 input_stream = &file_stream;
int execute_msgpack_run(const std::string &msgpack_input_file, int max_clients, size_t request_ring_size, size_t response_ring_size)
Execute msgpack run command.