Created
March 12, 2024 12:17
-
-
Save eao197/f666d83737931d7493568ba407f422fd to your computer and use it in GitHub Desktop.
An example of sending so_5::stats::messages::quantity<int> via custom data-source
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <so_5/all.hpp> | |
namespace example | |
{ | |
class a_stats_listener_t final : public so_5::agent_t | |
{ | |
public : | |
a_stats_listener_t( context_t ctx ) | |
: so_5::agent_t( std::move(ctx) ) | |
{} | |
void so_define_agent() override | |
{ | |
using namespace so_5::stats; | |
auto & controller = so_environment().stats_controller(); | |
so_default_state() | |
.event( controller.mbox(), &a_stats_listener_t::evt_quantity_size ) | |
.event( controller.mbox(), &a_stats_listener_t::evt_quantity_int ) | |
.event( controller.mbox(), | |
[this]( const messages::distribution_started & ) { | |
std::cout << "--- DISTRIBUTION STARTED ---" << std::endl; | |
} ) | |
.event( controller.mbox(), | |
[this]( const messages::distribution_finished & ) { | |
std::cout << "--- DISTRIBUTION FINISHED ---" << std::endl; | |
} ); | |
} | |
void so_evt_start() override | |
{ | |
so_environment().stats_controller().set_distribution_period( | |
std::chrono::seconds( 1 ) ); | |
so_environment().stats_controller().turn_on(); | |
} | |
private : | |
void evt_quantity_size( | |
const so_5::stats::messages::quantity< std::size_t > & evt ) | |
{ | |
std::cout << "S: " << evt.m_prefix << evt.m_suffix << "': " << evt.m_value << std::endl; | |
} | |
void evt_quantity_int( | |
const so_5::stats::messages::quantity< int > & evt ) | |
{ | |
std::cout << "I: " << evt.m_prefix << evt.m_suffix << "': " << evt.m_value << std::endl; | |
} | |
}; | |
class my_data_source_t final : public so_5::stats::source_t | |
{ | |
public: | |
void | |
distribute(const so_5::mbox_t & to) override | |
{ | |
so_5::send< so_5::stats::messages::quantity<int> >( | |
to, | |
"my_data_source", | |
"/dummy", | |
0 ); | |
}; | |
}; | |
class a_custom_ds_holder_t final : public so_5::agent_t | |
{ | |
so_5::stats::manually_registered_source_holder_t< my_data_source_t > m_ds_holder; | |
public: | |
a_custom_ds_holder_t( context_t ctx ) : so_5::agent_t{ std::move(ctx) } | |
{} | |
void | |
so_evt_start() override | |
{ | |
m_ds_holder.start( | |
so_5::outliving_mutable( so_environment().stats_repository() ) ); | |
} | |
void | |
so_evt_finish() override | |
{ | |
m_ds_holder.stop(); | |
} | |
}; | |
} /* namespace example */ | |
using namespace example; | |
int main() | |
{ | |
so_5::launch( [](so_5::environment_t & env) { | |
env.introduce_coop( [](so_5::coop_t & coop) { | |
coop.make_agent< a_stats_listener_t >(); | |
coop.make_agent< a_custom_ds_holder_t >(); | |
} ); | |
} ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment