#include <iostream>
#include <ace/OS.h>
#include <ace/Time_Value.h>
class msg_hello_to_all
:
{
public:
msg_hello_to_all(
const std::string & sender,
:
m_sender( sender ),
m_mbox( mbox )
{}
const std::string m_sender;
};
class msg_hello_to_you
:
{
public:
msg_hello_to_you(
const std::string & sender )
:
m_sender( sender )
{}
const std::string m_sender;
};
class a_hello_t
:
{
public:
a_hello_t(
const std::string & agent_name )
:
base_type_t( env ),
m_agent_name( agent_name ),
m_self_mbox( so_environment().create_local_mbox() ),
m_common_mbox( so_environment().create_local_mbox(
so_5::rt::nonempty_name_t( "common_mbox" ) ) )
{}
virtual ~a_hello_t()
{}
virtual void
virtual void
void
evt_hello_to_all(
void
evt_hello_to_you(
private:
const std::string m_agent_name;
};
void
a_hello_t::so_define_agent()
{
so_subscribe( m_common_mbox )
.event( &a_hello_t::evt_hello_to_all );
so_subscribe( m_self_mbox )
.event( &a_hello_t::evt_hello_to_you );
}
void
a_hello_t::so_evt_start()
{
std::cout << m_agent_name << ".so_evt_start" << std::endl;
new msg_hello_to_all(
m_agent_name,
m_self_mbox ) ) );
}
void
a_hello_t::evt_hello_to_all(
{
std::cout << m_agent_name << ".evt_hello_to_all: "
<< evt_data->m_sender << std::endl;
if( m_agent_name != evt_data->m_sender )
{
new msg_hello_to_you( m_agent_name ) ) );
}
}
void
a_hello_t::evt_hello_to_you(
{
std::cout << m_agent_name << ".evt_hello_to_you: "
<< evt_data->m_sender << std::endl;
}
void
{
new a_hello_t( env, "alpha" ) ) );
new a_hello_t( env, "beta" ) ) );
new a_hello_t( env, "gamma" ) ) );
ACE_OS::sleep( ACE_Time_Value( 0, 200*1000 ) );
}
int
main( int, char ** )
{
try
{
}
catch( const std::exception & ex )
{
std::cerr << "Error: " << ex.what() << std::endl;
return 1;
}
return 0;
}