#include <so_5/all.hpp>
using namespace std::chrono_literals;
void service_provider(
so_5::mchain_t in_chain,
int multiplier )
{
receive( from(in_chain).handle_all(),
[multiplier](sync_ns::request_mhood_t<int, std::string> cmd) {
cmd->make_reply(std::to_string(cmd->request() * multiplier));
} );
}
int main()
{
so_5::wrapped_env_t sobj;
std::thread provider1, provider2;
auto joiner = so_5::auto_join(provider1, provider2);
auto in1 = so_5::create_mchain(sobj);
auto in2 = so_5::create_mchain(sobj);
auto closer = so_5::auto_close_drop_content(in1, in2);
provider1 = std::thread{ service_provider, in1, 2 };
provider2 = std::thread{ service_provider, in2, 3 };
std::cout
<< "First provider reply: "
<< sync_ns::request_reply<int, std::string>(in1, 1s, 3)
<< std::endl
<< "Second provider reply: "
<< sync_ns::request_reply<int, std::string>(in2, 1s, 3)
<< std::endl;
return 0;
}
Implementation of synchronous operations on top of SObjectizer.