diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 45914b2..589e19d 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -19,3 +19,15 @@ target_link_libraries(plugin_ngcft1 PUBLIC ######################################## +add_library(plugin_ngchs2 MODULE + ./plugin_ngchs2.cpp +) +target_compile_features(plugin_ngchs2 PUBLIC cxx_std_17) +set_target_properties(plugin_ngchs2 PROPERTIES + C_VISIBILITY_PRESET hidden +) +target_compile_definitions(plugin_ngchs2 PUBLIC ENTT_API_IMPORT) +target_link_libraries(plugin_ngchs2 PUBLIC + solanaceae_plugin + solanaceae_ngchs2 +) diff --git a/plugins/plugin_ngchs2.cpp b/plugins/plugin_ngchs2.cpp new file mode 100644 index 0000000..1646b23 --- /dev/null +++ b/plugins/plugin_ngchs2.cpp @@ -0,0 +1,77 @@ +#include + +#include + +#include +#include +#include + +#include +#include + +#include +#include + +// https://youtu.be/OwT83dN82pc + +static std::unique_ptr g_ngchs2s = nullptr; +static std::unique_ptr g_ngchs2r = nullptr; + +constexpr const char* plugin_name = "NGCHS2"; + +extern "C" { + +SOLANA_PLUGIN_EXPORT const char* solana_plugin_get_name(void) { + return plugin_name; +} + +SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_get_version(void) { + return SOLANA_PLUGIN_VERSION; +} + +SOLANA_PLUGIN_EXPORT uint32_t solana_plugin_start(struct SolanaAPI* solana_api) { + std::cout << "PLUGIN " << plugin_name << " START()\n"; + + if (solana_api == nullptr) { + return 1; + } + + try { + //auto* tox_i = PLUG_RESOLVE_INSTANCE(ToxI); + auto* tox_event_provider_i = PLUG_RESOLVE_INSTANCE(ToxEventProviderI); + auto* cr = PLUG_RESOLVE_INSTANCE_VERSIONED(Contact3Registry, "1"); + auto* rmm = PLUG_RESOLVE_INSTANCE(RegistryMessageModelI); + auto* tcm = PLUG_RESOLVE_INSTANCE(ToxContactModel2); + auto* ngcft1 = PLUG_RESOLVE_INSTANCE(NGCFT1); + + // static store, could be anywhere tho + // construct with fetched dependencies + g_ngchs2s = std::make_unique(*cr, *rmm, *tcm, *ngcft1); + g_ngchs2r = std::make_unique(*cr, *rmm, *tcm, *ngcft1, *tox_event_provider_i); + + // register types + PLUG_PROVIDE_INSTANCE(NGCHS2Sigma, plugin_name, g_ngchs2s.get()); + PLUG_PROVIDE_INSTANCE(NGCHS2Rizzler, plugin_name, g_ngchs2r.get()); + } catch (const ResolveException& e) { + std::cerr << "PLUGIN " << plugin_name << " " << e.what << "\n"; + return 2; + } + + return 0; +} + +SOLANA_PLUGIN_EXPORT void solana_plugin_stop(void) { + std::cout << "PLUGIN " << plugin_name << " STOP()\n"; + + g_ngchs2r.reset(); + g_ngchs2s.reset(); +} + +SOLANA_PLUGIN_EXPORT float solana_plugin_tick(float delta) { + const float sigma_interval = g_ngchs2s->iterate(delta); + const float rizzler_interval = g_ngchs2r->iterate(delta); + return std::min(sigma_interval, rizzler_interval); +} + +} // extern C + diff --git a/solanaceae/ngc_hs2/ngc_hs2_rizzler.cpp b/solanaceae/ngc_hs2/ngc_hs2_rizzler.cpp index e2918a9..5424a66 100644 --- a/solanaceae/ngc_hs2/ngc_hs2_rizzler.cpp +++ b/solanaceae/ngc_hs2/ngc_hs2_rizzler.cpp @@ -1,4 +1,5 @@ #include "./ngc_hs2_rizzler.hpp" +#include "tox/tox_events.h" #include @@ -12,19 +13,25 @@ NGCHS2Rizzler::NGCHS2Rizzler( Contact3Registry& cr, RegistryMessageModelI& rmm, ToxContactModel2& tcm, - NGCFT1& nft + NGCFT1& nft, + ToxEventProviderI& tep ) : _cr(cr), _rmm(rmm), _tcm(tcm), _nft(nft), - _nftep_sr(_nft.newSubRef(this)) + _nftep_sr(_nft.newSubRef(this)), + _tep_sr(tep.newSubRef(this)) + { _nftep_sr .subscribe(NGCFT1_Event::recv_init) .subscribe(NGCFT1_Event::recv_data) .subscribe(NGCFT1_Event::recv_done) ; + _tep_sr + .subscribe(Tox_Event_Type::TOX_EVENT_GROUP_PEER_JOIN) + ; } NGCHS2Rizzler::~NGCHS2Rizzler(void) { diff --git a/solanaceae/ngc_hs2/ngc_hs2_rizzler.hpp b/solanaceae/ngc_hs2/ngc_hs2_rizzler.hpp index 1e8c424..253e531 100644 --- a/solanaceae/ngc_hs2/ngc_hs2_rizzler.hpp +++ b/solanaceae/ngc_hs2/ngc_hs2_rizzler.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include @@ -14,6 +15,7 @@ class NGCHS2Rizzler : public ToxEventI, public NGCFT1EventI { ToxContactModel2& _tcm; NGCFT1& _nft; NGCFT1EventProviderI::SubscriptionReference _nftep_sr; + ToxEventProviderI::SubscriptionReference _tep_sr; // 5s-6s const float _delay_before_first_request_min {5.f}; @@ -36,7 +38,8 @@ class NGCHS2Rizzler : public ToxEventI, public NGCFT1EventI { Contact3Registry& cr, RegistryMessageModelI& rmm, ToxContactModel2& tcm, - NGCFT1& nf + NGCFT1& nft, + ToxEventProviderI& tep ); ~NGCHS2Rizzler(void); diff --git a/solanaceae/ngc_hs2/ngc_hs2_sigma.hpp b/solanaceae/ngc_hs2/ngc_hs2_sigma.hpp index 9750899..de721b1 100644 --- a/solanaceae/ngc_hs2/ngc_hs2_sigma.hpp +++ b/solanaceae/ngc_hs2/ngc_hs2_sigma.hpp @@ -76,7 +76,7 @@ class NGCHS2Sigma : public RegistryMessageModelEventI, public NGCFT1EventI { Contact3Registry& cr, RegistryMessageModelI& rmm, ToxContactModel2& tcm, - NGCFT1& nf + NGCFT1& nft ); ~NGCHS2Sigma(void);