#include <so_5/all.hpp>
class worker_t final : public so_5::agent_t
{
public :
worker_t(
context_t ctx,
std::string name,
const so_5::mbox_t & src )
: so_5::agent_t( std::move(ctx) )
, m_name( std::move(name) )
{
so_subscribe( src ).event( &worker_t::on_task );
}
private :
const std::string m_name;
void on_task( mhood_t<std::string> cmd )
{
std::cout << m_name << ": " << *cmd << std::endl;
so_deregister_agent_coop_normally();
}
};
int main()
{
so_5::launch( []( so_5::environment_t & env ) {
for( int i = 0; i < 3; ++i )
env.introduce_coop( [&]( so_5::coop_t & coop ) {
coop.make_agent< worker_t >(
"worker-" + std::to_string( i + 1 ),
std::cref(rrmbox) );
} );
so_5::send< std::string >( rrmbox, "Alpha" );
so_5::send< std::string >( rrmbox, "Beta" );
so_5::send< std::string >( rrmbox, "Gamma" );
} );
return 0;
}
Implementation of round-robin mbox.