diff --git a/src/solanaceae/zox/ngc.cpp b/src/solanaceae/zox/ngc.cpp index 5830c1e..fa56d8a 100644 --- a/src/solanaceae/zox/ngc.cpp +++ b/src/solanaceae/zox/ngc.cpp @@ -38,13 +38,11 @@ std::optional> parse_zox_pkg_header(const uint8_t* d return std::make_pair(version, pkt_id); } -void ZoxNGCEventProvider::subscribeToEvents(void) { - _tep.subscribe(this, Tox_Event_Type::TOX_EVENT_GROUP_CUSTOM_PACKET); - _tep.subscribe(this, Tox_Event_Type::TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET); -} - -ZoxNGCEventProvider::ZoxNGCEventProvider(ToxEventProviderI& tep) : _tep(tep) { - subscribeToEvents(); +ZoxNGCEventProvider::ZoxNGCEventProvider(ToxEventProviderI& tep) : _tep_sr(tep.newSubRef(this)) { + _tep_sr + .subscribe(Tox_Event_Type::TOX_EVENT_GROUP_CUSTOM_PACKET) + .subscribe(Tox_Event_Type::TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET) + ; } bool ZoxNGCEventProvider::onZoxGroupEvent( diff --git a/src/solanaceae/zox/ngc.hpp b/src/solanaceae/zox/ngc.hpp index d78405a..694e88b 100644 --- a/src/solanaceae/zox/ngc.hpp +++ b/src/solanaceae/zox/ngc.hpp @@ -108,11 +108,9 @@ struct ZoxNGCEventI { using ZoxNGCEventProviderI = EventProviderI; class ZoxNGCEventProvider : public ToxEventI, public ZoxNGCEventProviderI { - ToxEventProviderI& _tep; + ToxEventProviderI::SubscriptionReference _tep_sr; //ToxI& _t; - void subscribeToEvents(void); // private - public: ZoxNGCEventProvider(ToxEventProviderI& tep/*, ToxI& t*/); diff --git a/src/solanaceae/zox/ngc_hs.cpp b/src/solanaceae/zox/ngc_hs.cpp index 737ce29..bf786d4 100644 --- a/src/solanaceae/zox/ngc_hs.cpp +++ b/src/solanaceae/zox/ngc_hs.cpp @@ -14,17 +14,15 @@ #include #include -void ZoxNGCHistorySync::subscribeToEvents(void) { - _zngcepi.subscribe(this, ZoxNGC_Event::ngch_request); - _zngcepi.subscribe(this, ZoxNGC_Event::ngch_syncmsg); - - _tep.subscribe(this, Tox_Event_Type::TOX_EVENT_GROUP_PEER_JOIN); -} - ZoxNGCHistorySync::ZoxNGCHistorySync(ToxEventProviderI& tep, ZoxNGCEventProviderI& zngcepi, ToxI& t, Contact3Registry& cr, ToxContactModel2& tcm, RegistryMessageModelI& rmm) - : _tep(tep), _zngcepi(zngcepi), _t(t), _cr(cr), _tcm(tcm), _rmm(rmm), _rng(std::random_device{}()) + : _tep_sr(tep.newSubRef(this)), _zngcepi_sr(zngcepi.newSubRef(this)), _t(t), _cr(cr), _tcm(tcm), _rmm(rmm), _rng(std::random_device{}()) { - subscribeToEvents(); + _tep_sr.subscribe(Tox_Event_Type::TOX_EVENT_GROUP_PEER_JOIN); + + _zngcepi_sr + .subscribe(ZoxNGC_Event::ngch_request) + .subscribe(ZoxNGC_Event::ngch_syncmsg) + ; } float ZoxNGCHistorySync::tick(float delta) { diff --git a/src/solanaceae/zox/ngc_hs.hpp b/src/solanaceae/zox/ngc_hs.hpp index 2d53d0a..e3b2b06 100644 --- a/src/solanaceae/zox/ngc_hs.hpp +++ b/src/solanaceae/zox/ngc_hs.hpp @@ -15,12 +15,13 @@ struct ToxI; struct ContactModelI; class ToxContactModel2; -// zoff ngc history sync (draft1?) -// https://gist.github.com/zoff99/81917ddb2e55b2ce602cac4772a7b68c +// zoff ngc history sync +// https://github.com/zoff99/c-toxcore/blob/zoff99/zoxcore_local_fork/docs/ngc_group_history_sync.md +// (old) https://gist.github.com/zoff99/81917ddb2e55b2ce602cac4772a7b68c class ZoxNGCHistorySync : public ToxEventI, public ZoxNGCEventI { - ToxEventProviderI& _tep; - ZoxNGCEventProviderI& _zngcepi; + ToxEventProviderI::SubscriptionReference _tep_sr; + ZoxNGCEventProviderI::SubscriptionReference _zngcepi_sr; ToxI& _t; Contact3Registry& _cr; ToxContactModel2& _tcm; @@ -61,10 +62,6 @@ class ZoxNGCHistorySync : public ToxEventI, public ZoxNGCEventI { }; std::map _sync_queue; - // sync queue - - void subscribeToEvents(void); // private - public: ZoxNGCHistorySync(ToxEventProviderI& tep, ZoxNGCEventProviderI& zngcepi, ToxI& t, Contact3Registry& cr, ToxContactModel2& tcm, RegistryMessageModelI& rmm);