#include <iostream>
#include <sstream>
{
public :
{}
{
std::cout << "hello: " << msg << std::endl;
if( 0 == (--m_remaining_messages) )
} );
}
{
create_first_child_coop();
create_second_child_coop();
}
private :
unsigned int m_remaining_messages = 6;
void create_first_child_coop()
{
*this,
disp.binder() );
fill_and_register_coop( std::move( coop ), "one_thread" );
}
void create_second_child_coop()
{
*this,
disp.binder() );
fill_and_register_coop( std::move( coop ), "active_obj" );
}
void fill_and_register_coop(
const std::string & agent_name_prefix )
{
const std::string m_agent_name;
public :
demo_agent_t(
context_t ctx,
std::string agent_name )
, m_mbox{ std::move(mbox) }
, m_agent_name{ std::move(agent_name) }
{}
void so_evt_start() override
{
std::ostringstream ss;
ss << m_agent_name << " on thread: "
<< std::this_thread::get_id();
}
};
for( int i = 0; i != 3; ++i )
{
mbox,
agent_name_prefix + "-" + std::to_string( i ) );
}
}
};
int main()
{
try
{
} );
return 0;
}
catch( const std::exception & x )
{
std::cerr << "*** Exception caught: " << x.what() << std::endl;
}
return 2;
}
A helper header file for including all public SObjectizer stuff.
virtual void so_define_agent()
Hook on define agent for SObjectizer.
void so_deregister_agent_coop_normally()
A helper method for deregistering agent's coop in case of normal deregistration.
const mbox_t & so_direct_mbox() const
Get the agent's direct mbox.
environment_t & so_environment() const noexcept
Access to the SObjectizer Environment which this agent is belong.
const state_t & so_default_state() const
Access to the agent's default state.
virtual void so_evt_start()
Hook on agent start inside SObjectizer.
Agent * make_agent(Args &&... args)
Helper method for simplification of agents creation.
A special type that plays role of unique_ptr for coop.
coop_handle_t register_agent_as_coop(std::unique_ptr< A > agent)
Register single agent as a cooperation.
std::unique_ptr< Agent > make_agent(Args &&... args)
Helper method for simplification of agents creation.
coop_handle_t register_coop(coop_unique_holder_t agent_coop)
Register a cooperation.
const state_t & event(Args &&... args) const
Helper for subscription of event handler in this state.
SO_5_FUNC dispatcher_handle_t make_dispatcher(environment_t &env, const std::string_view data_sources_name_base, disp_params_t params)
Create an instance of active_obj dispatcher.
SO_5_FUNC dispatcher_handle_t make_dispatcher(environment_t &env, const std::string_view data_sources_name_base, disp_params_t params)
Create an instance of one_thread dispatcher.
void launch(Init_Routine &&init_routine)
Launch a SObjectizer Environment with default parameters.
void send(Target &&to, Args &&... args)
A utility function for creating and delivering a message or a signal.
coop_unique_holder_t create_child_coop(agent_t &owner, Args &&... args)
A simple way for creating child cooperation.