#include <iostream>
{
int m_value;
msg_data( int v ) : m_value{ v } {}
};
{
int m_value_counter{};
public:
data_generator( context_t ctx )
, m_dest{ so_environment().create_mbox() }
{}
{
return m_dest;
}
{
}
{
}
private:
void evt_generate_next( mhood_t< msg_generate_next > )
{
std::chrono::milliseconds{ 25 } );
}
};
{
int m_messages_consumed{};
public:
data_consumer( context_t ctx )
{}
{
.
event( &data_consumer::evt_data );
}
private:
void evt_data( mhood_t< msg_data > cmd )
{
std::cout << "data_consumer: new data: " << cmd->m_value << std::endl;
++m_messages_consumed;
if( m_messages_consumed > 3 )
}
};
int main()
{
try
{
{
auto * generator = coop.
make_agent< data_generator >();
auto * consumer = coop.
make_agent< data_consumer >();
std::make_unique< so_5::single_sink_binding_t >() );
binding->bind< msg_data >(
generator->distribution_mbox(),
} );
} );
}
catch( const std::exception & ex )
{
std::cerr << "Error: " << ex.what() << std::endl;
return 1;
}
return 0;
}
A helper header file for including all public SObjectizer stuff.
virtual void so_define_agent()
Hook on define agent for SObjectizer.
subscription_bind_t so_subscribe_self()
Initiate subscription to agent's direct mbox.
void so_deregister_agent_coop_normally()
A helper method for deregistering agent's coop in case of normal deregistration.
virtual void so_evt_start()
Hook on agent start inside SObjectizer.
Agent * make_agent(Args &&... args)
Helper method for simplification of agents creation.
T * take_under_control(std::unique_ptr< T > resource)
Take a user resouce under cooperation control.
decltype(auto) introduce_coop(Args &&... args)
Helper method for simplification of cooperation creation and registration.
A base class for agent messages.
A base class for agent signals.
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.
Private part of message limit implementation.
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.
msink_t SO_5_FUNC wrap_to_msink(const mbox_t &mbox, priority_t sink_priority=prio::p0)
Helper for wrapping an existing mbox into message_sink.
void send_delayed(Target &&target, std::chrono::steady_clock::duration pause, Args &&... args)
A utility function for creating and delivering a delayed message to the specified destination.