#include <iostream>
{
std::string m_payload;
envelope(std::string payload) : m_payload(std::move(payload)) {}
};
{
public :
chain_agent(context_t ctx,
std::string name,
std::string prefix, std::string suffix,
:
so_5::agent_t(std::move(ctx))
, m_name(std::move(name))
, m_prefix(std::move(prefix))
, m_suffix(std::move(suffix))
, m_next(std::move(next))
{
}
private :
const std::string m_prefix;
const std::string m_suffix;
void on_envelope(mutable_mhood_t<envelope> cmd)
{
std::cout << m_name << ", msg_addr=" << cmd.get()
<< ", old_content=" << cmd->m_payload;
cmd->m_payload.insert(begin(cmd->m_payload), begin(m_prefix), end(m_prefix));
cmd->m_payload.insert(end(cmd->m_payload), begin(m_suffix), end(m_suffix));
std::cout << ", new_content=" << cmd->m_payload << std::endl;
}
};
{
public :
last_agent(context_t ctx) :
so_5::agent_t(std::move(ctx))
{
}
private :
void on_envelope(mutable_mhood_t<envelope> cmd)
{
std::cout << "last, msg_addr=" << cmd.get()
<< ", content=" << cmd->m_payload;
}
};
int main()
{
try
{
"third", " [", "] ", last->so_direct_mbox() );
"second", " {", "} ", third->so_direct_mbox() );
"first", " (", ") ", second->so_direct_mbox() );
return first->so_direct_mbox();
} );
} );
}
catch(const std::exception & x)
{
std::cerr << "Oops! Exception: " << x.what() << std::endl;
}
return 0;
}
A helper header file for including all public SObjectizer stuff.
const name_for_agent_t m_name
Optional name for the agent.
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.
Agent * make_agent(Args &&... args)
Helper method for simplification of agents creation.
decltype(auto) introduce_coop(Args &&... args)
Helper method for simplification of cooperation creation and registration.
A base class for agent messages.
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.