Copyright Matus Chochlik. Distributed under the Boost Software License, Version 1.0. See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
#include <iostream>
namespace msgbus {
struct str_utils_server
: main_ctx_object
, static_subscriber<2> {
using this_class = str_utils_server;
using base = static_subscriber<2>;
, base(
ep,
this,
auto reverse(
const message_context&, stored_message& msg) ->
bool {
auto str = msg.text_content();
return true;
}
auto uppercase(const message_context&, stored_message& msg) -> bool {
auto str = msg.text_content();
transform(str, [](char x) { return char(std::toupper(x)); });
return true;
}
};
struct str_utils_client
: main_ctx_object
, static_subscriber<2> {
using this_class = str_utils_client;
using base = static_subscriber<2>;
, base(
ep,
this,
++_remaining;
}
++_remaining;
}
auto print(const message_context&, stored_message& msg) -> bool {
log_info(
"received response: ${content}")
.arg(
EAGINE_ID(content), msg.text_content());
--_remaining;
return true;
}
auto is_done() const -> bool {
return _remaining <= 0;
}
private:
logger _log{};
int _remaining{0};
};
}
auto main(main_ctx& ctx) -> int {
auto acceptor = std::make_unique<msgbus::direct_acceptor>(ctx);
msgbus::endpoint server_endpoint{
EAGINE_ID(ServerEp), ctx};
msgbus::endpoint client_endpoint{
EAGINE_ID(ClientEp), ctx};
server_endpoint.add_connection(acceptor->make_connection());
client_endpoint.add_connection(acceptor->make_connection());
router.add_acceptor(std::move(acceptor));
msgbus::str_utils_server server(server_endpoint);
msgbus::str_utils_client client(client_endpoint);
client.call_reverse("foo");
client.call_reverse("bar");
client.call_reverse("baz");
client.call_reverse("qux");
client.call_uppercase("foo");
client.call_uppercase("bar");
client.call_uppercase("baz");
client.call_uppercase("qux");
while(!client.is_done()) {
server_endpoint.update();
client_endpoint.update();
server.process_one();
client.process_one();
}
return 0;
}
}