virtual void so_evt_start() { so_5::mbox_t mbox = so_environment() .create_mbox( so_coop_name() + "_mbox" ); so_subscribe( mbox ) .in( so_default_state() ) .event( &a_master_t::evt_slave_finished ); so_environment().register_agent_as_coop( so_coop_name() + "_slave", new a_slave_t( so_environment(), mbox ) ); }
virtual void so_evt_start() { auto child = so_environment().create_coop( so_coop_name() + "::child" ); child->set_parent_coop_name( so_coop_name() ); auto mbox = so_environment().create_mbox(); child->add_agent( new a_test_t( so_environment(), mbox ) ); so_environment().register_coop( std::move(child) ); mbox->deliver_signal< msg_test_signal >(); }
void so_evt_start() { so_environment().deregister_coop( so_coop_name(), so_5::dereg_reason::normal ); }
virtual void so_evt_start() { so_environment().deregister_coop( so_coop_name(), so_5::dereg_reason::normal ); m_master_mbox->deliver_signal< slave_coop_finished_signal >(); }
void evt_child_started( const so_5::event_data_t< msg_child_started > & ) { m_started_children += 1; if( m_started_children == m_max_children ) { if( m_level ) notify_parent(); else so_environment().deregister_coop( so_coop_name(), so_5::dereg_reason::normal ); } }
void so_evt_start() { auto child_coop = so_environment().create_coop( "child" ); child_coop->set_parent_coop_name( so_coop_name() ); child_coop->add_reg_notificator( m_reg_notificator ); child_coop->add_dereg_notificator( m_dereg_notificator ); child_coop->add_dereg_notificator( [this]( so_5::environment_t &, const std::string &, const so_5::coop_dereg_reason_t &) { m_mbox->deliver_signal< msg_child_deregistered >(); } ); child_coop->add_agent( new a_child_t( so_environment() ) ); so_environment().register_coop( std::move( child_coop ) ); }
void try_start_new_iteration() { if( m_iterations_left <= 0 ) { std::cout << "COMPLETED!" << std::endl; so_environment().stop(); return; } std::cout << m_iterations_left << " iterations left...\r" << std::flush; m_state = state_t::awaiting_creation; m_acks_received = 0; m_destroy_received = 0; m_child_mboxes = std::vector< so_5::rt::mbox_t >(); m_child_mboxes.reserve( m_max_agents ); auto coop = so_environment().create_coop( "child" ); coop->set_parent_coop_name( so_coop_name() ); coop->add_reg_notificator( so_5::rt::make_coop_reg_notificator( so_direct_mbox() ) ); coop->add_dereg_notificator( so_5::rt::make_coop_dereg_notificator( so_direct_mbox() ) ); for( std::size_t i = 0; i != m_max_agents; ++i ) { std::unique_ptr< so_5::rt::agent_t > agent( new a_child_t( so_environment(), so_direct_mbox() ) ); m_child_mboxes.push_back( agent->so_direct_mbox() ); coop->add_agent( std::move( agent ) ); } so_environment().register_coop( std::move( coop ) ); }
void agent_t::so_deregister_agent_coop( int dereg_reason ) { so_environment().deregister_coop( so_coop_name(), dereg_reason ); }
virtual void evt_initiate_dereg() { so_environment().deregister_coop( so_coop_name(), so_5::dereg_reason::normal ); }