From dd596bdad8d71654ff21dd3a032d6eb2dd7139a8 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sat, 19 Aug 2023 12:03:53 +0200 Subject: [PATCH] fetch group peer con state and slightly change interface --- .../tox_contacts/tox_contact_model2.cpp | 23 +++++++++++++++++++ .../tox_contacts/tox_contact_model2.hpp | 7 +++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/solanaceae/tox_contacts/tox_contact_model2.cpp b/solanaceae/tox_contacts/tox_contact_model2.cpp index 306c4aa..19e0d62 100644 --- a/solanaceae/tox_contacts/tox_contact_model2.cpp +++ b/solanaceae/tox_contacts/tox_contact_model2.cpp @@ -45,6 +45,29 @@ ToxContactModel2::ToxContactModel2(Contact3Registry& cr, ToxI& t, ToxEventProvid } } +ToxContactModel2::~ToxContactModel2(void) { +} + +void ToxContactModel2::iterate(float delta) { + // continually fetch group peer connection state, since JF does not want to add cb/event + _group_status_timer += delta; + // every second + if (_group_status_timer >= 1.f) { + _group_status_timer = 0.f; + + _cr.view().each([this](auto c, const auto& tox_peer, auto& con) { + auto state_opt = std::get<0>(_t.toxGroupPeerGetConnectionStatus(tox_peer.group_number, tox_peer.peer_number)); + if (state_opt.has_value()) { + if (state_opt.value() == TOX_CONNECTION_UDP) { + con.state = Contact::Components::ConnectionState::State::direct; + } else if (state_opt.value() == TOX_CONNECTION_TCP) { + con.state = Contact::Components::ConnectionState::State::cloud; + } + } + }); + } +} + void ToxContactModel2::acceptRequest(Contact3 c, std::string_view self_name, std::string_view password) { assert(!_cr.any_of(c)); assert(_cr.all_of(c)); diff --git a/solanaceae/tox_contacts/tox_contact_model2.hpp b/solanaceae/tox_contacts/tox_contact_model2.hpp index 83da163..bdf4128 100644 --- a/solanaceae/tox_contacts/tox_contact_model2.hpp +++ b/solanaceae/tox_contacts/tox_contact_model2.hpp @@ -16,13 +16,14 @@ class ToxContactModel2 : public ContactModel3I, public ToxEventI { Contact3 _friend_self; + float _group_status_timer {0.f}; + public: ToxContactModel2(Contact3Registry& cr, ToxI& t, ToxEventProviderI& tep); - virtual ~ToxContactModel2(void) {} + virtual ~ToxContactModel2(void); // TODO: continually fetch group peer connection state, since JF does not want to add cb/event - //void iterate(void); - + void iterate(float delta); protected: // mmi // accept incoming request