#include <iostream>
#include <sstream>
struct task_result
{
unsigned int m_id;
};
{
public:
a_child_t(
context_t ctx,
unsigned int task_id )
, m_result_mbox(
std::move(result_mbox) )
, m_task_id( task_id )
{}
virtual ~a_child_t() override
{
std::cout << "Child: agent of the task " << m_task_id
<< " has destroyed." << std::endl;
}
{
}
{
std::cout << "Child: has started to do task " << m_task_id << std::endl;
so_5::send_delayed< task_completed >( *this, std::chrono::seconds( 1 ) );
}
{
std::cout << "Child: has finished, task " << m_task_id << std::endl;
}
void evt_task_completed()
{
std::cout << "Child: has completed his task " << m_task_id << std::endl;
so_5::send< task_result >( m_result_mbox, m_task_id );
}
private:
const unsigned int m_task_id;
};
{
public:
{}
virtual ~a_parent_t() override
{
std::cout << "Parent: agent has destroyed." << std::endl;
}
{
}
{
std::cout << "Parent: agent has started." << std::endl;
start_child( 0 );
}
{
std::cout << "Parent: agent has finished." << std::endl;
}
void evt_task_result( const task_result & evt )
{
std::cout << "Parent: task result " << evt.m_id << " is received." << std::endl;
start_child( evt.m_id + 1 );
}
private:
void start_child( unsigned int id )
{
std::cout << "Parent: starting a child to do task " << id << std::endl;
} );
}
};
int main()
{
try
{
{
std::this_thread::sleep_for( std::chrono::seconds( 3 ) );
} );
}
catch( const std::exception & ex )
{
std::cerr << "Error: " << ex.what() << std::endl;
return 1;
}
return 0;
}