SObjectizer  5.8
Loading...
Searching...
No Matches
so_5/ping_pong_minimal/main.cpp
#include <iostream>
#include <so_5/all.hpp>
// Types of signals for the agents.
struct msg_ping final : public so_5::signal_t {};
struct msg_pong final : public so_5::signal_t {};
// Class of pinger agent.
class a_pinger_t final : public so_5::agent_t
{
public :
a_pinger_t( context_t ctx, so_5::mbox_t mbox, int pings_to_send )
: so_5::agent_t{ ctx }
, m_mbox{ std::move(mbox) }
, m_pings_left{ pings_to_send }
{}
void so_define_agent() override
{
so_subscribe( m_mbox ).event( &a_pinger_t::evt_pong );
}
void so_evt_start() override
{
send_ping();
}
private :
const so_5::mbox_t m_mbox;
int m_pings_left;
void evt_pong(mhood_t< msg_pong >)
{
if( m_pings_left > 0 )
send_ping();
else
}
void send_ping()
{
--m_pings_left;
}
};
class a_ponger_t final : public so_5::agent_t
{
public :
a_ponger_t( context_t ctx, const so_5::mbox_t & mbox )
: so_5::agent_t( std::move(ctx) )
{
[mbox]( mhood_t<msg_ping> ) {
} );
}
};
int main()
{
try
{
env.introduce_coop( [&env]( so_5::coop_t & coop ) {
// Mbox for agent's interaction.
auto mbox = env.create_mbox();
// Pinger.
coop.make_agent< a_pinger_t >( mbox, 100000 );
// Ponger agent.
coop.make_agent< a_ponger_t >( std::cref(mbox) );
});
});
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.
A base class for agents.
Definition agent.hpp:673
virtual void so_define_agent()
Hook on define agent for SObjectizer.
Definition agent.cpp:975
environment_t & so_environment() const noexcept
Access to the SObjectizer Environment which this agent is belong.
Definition agent.cpp:987
subscription_bind_t so_subscribe(const mbox_t &mbox_ref)
Initiate subscription.
Definition agent.hpp:1404
virtual void so_evt_start()
Hook on agent start inside SObjectizer.
Definition agent.cpp:832
Agent cooperation.
Definition coop.hpp:389
Agent * make_agent(Args &&... args)
Helper method for simplification of agents creation.
Definition coop.hpp:792
SObjectizer Environment.
mbox_t create_mbox()
Create an anonymous MPMC mbox.
void stop() noexcept
Send a shutdown signal to the Run-Time.
decltype(auto) introduce_coop(Args &&... args)
Helper method for simplification of cooperation creation and registration.
A base class for agent signals.
Definition message.hpp:275
std::enable_if< details::is_agent_method_pointer< details::method_arity::unary, Method_Pointer >::value, subscription_bind_t & >::type event(Method_Pointer pfn, thread_safety_t thread_safety=not_thread_safe)
Make subscription to the message.
Definition agent.hpp:3657
Private part of message limit implementation.
Definition agent.cpp:33
void launch(Init_Routine &&init_routine)
Launch a SObjectizer Environment with default parameters.
Definition api.hpp:142
void send(Target &&to, Args &&... args)
A utility function for creating and delivering a message or a signal.
STL namespace.