SObjectizer 5.8
Loading...
Searching...
No Matches
so_5/make_new_direct_mbox/main.cpp
/*
* A sample of usage of so_make_new_direct_mbox() method.
*/
#include <iostream>
// Main SObjectizer header files.
#include <so_5/all.hpp>
// Definition of an agent for SObjectizer.
class a_demo_t final : public so_5::agent_t
{
// Signals to be used by this agent.
struct msg_hello final : public so_5::signal_t {};
struct msg_bye final : public so_5::signal_t {};
public:
void so_evt_start() override
{
// Make subscriptions for the default direct mbox.
.event( [](mhood_t<msg_hello>) {
std::cout << "hello from the default mbox" << std::endl;
} )
.event( [this](mhood_t<msg_bye>) {
// Work should be finished.
} );
// Create another direct mbox and make subscription for it.
const auto another = so_make_new_direct_mbox();
so_subscribe( another )
.event( [](mhood_t<msg_hello>) {
std::cout << "hello from a new direct mbox" << std::endl;
} );
// Send signals.
}
};
int main()
{
try
{
// Starting SObjectizer.
// A function for SO Environment initialization.
[]( so_5::environment_t & env )
{
// Creating and registering single agent as a cooperation.
env.register_agent_as_coop( env.make_agent< a_demo_t >() );
} );
}
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.
A base class for agents.
Definition agent.hpp:673
subscription_bind_t so_subscribe_self()
Initiate subscription to agent's direct mbox.
Definition agent.hpp:1416
agent_t(environment_t &env)
Constructor.
Definition agent.cpp:646
mbox_t so_make_new_direct_mbox()
Create a new direct mbox for that agent.
Definition agent.cpp:768
void so_deregister_agent_coop_normally()
A helper method for deregistering agent's coop in case of normal deregistration.
Definition agent.cpp:982
subscription_bind_t so_subscribe(const mbox_t &mbox_ref)
Initiate subscription.
Definition agent.hpp:1359
virtual void so_evt_start()
Hook on agent start inside SObjectizer.
Definition agent.cpp:701
SObjectizer Environment.
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.
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:3490
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.