SObjectizer  5.8
Loading...
Searching...
No Matches
so_5/two_handlers/main.cpp
/*
* An example of receiving message of type M as immutable and as mutable ones.
*/
// Main SObjectizer header files.
#include <so_5/all.hpp>
// Definition of an agent for SObjectizer.
class two_handlers final : public so_5::agent_t {
// Message to be sent as mutable and immutable.
struct M final {};
// Helper signal to stop the example.
struct stop final : public so_5::signal_t {};
public :
two_handlers(context_t ctx) : so_5::agent_t(std::move(ctx)) {
.event(&two_handlers::on_immutable_M)
.event(&two_handlers::on_mutable_M)
.event(&two_handlers::on_stop);
}
void so_evt_start() override {
so_5::send<M>(*this); // Immutable message is sent.
so_5::send<so_5::mutable_msg<M>>(*this); // Mutable message is sent.
so_5::send<stop>(*this); // Finish the work.
}
private :
void on_immutable_M(mhood_t<M>) {
std::cout << "on immutable" << std::endl;
}
void on_mutable_M(mhood_t<so_5::mutable_msg<M>>) {
std::cout << "on mutable" << std::endl;
}
void on_stop(mhood_t<stop>) { so_deregister_agent_coop_normally(); }
};
int main()
{
// Starting SObjectizer.
// A function for SO Environment initialization.
{
// Creating and registering single agent as a cooperation.
env.register_agent_as_coop( env.make_agent<two_handlers>() );
} );
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:1461
void so_deregister_agent_coop_normally()
A helper method for deregistering agent's coop in case of normal deregistration.
Definition agent.cpp:1116
virtual void so_evt_start()
Hook on agent start inside SObjectizer.
Definition agent.cpp:832
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:3657
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.
A special marker for mutable message.
Definition message.hpp:383