From c7096828e62fcea63120504b867150130377ab75 Mon Sep 17 00:00:00 2001 From: Michael Jurkoic Date: Sun, 17 Mar 2024 19:12:30 -0500 Subject: Provide methods to close all open subscriptions --- src/nostr_service.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/nostr_service.cpp') diff --git a/src/nostr_service.cpp b/src/nostr_service.cpp index e3b1f19..3ac5177 100644 --- a/src/nostr_service.cpp +++ b/src/nostr_service.cpp @@ -225,6 +225,49 @@ tuple NostrService::closeSubscription(string subscriptionI return make_tuple(successfulRelays, failedRelays); }; +tuple NostrService::closeSubscriptions() +{ + return this->closeSubscriptions(this->_activeRelays); +}; + +tuple NostrService::closeSubscriptions(RelayList relays) +{ + RelayList successfulRelays; + RelayList failedRelays; + + vector>> closeFutures; + for (const string relay : relays) + { + future> closeFuture = async([this, &relay]() { + RelayList successfulRelays; + RelayList failedRelays; + + for (const string& subscriptionId : this->_subscriptions[relay]) + { + auto [successes, failures] = this->closeSubscription(subscriptionId); + successfulRelays.insert(successfulRelays.end(), successes.begin(), successes.end()); + failedRelays.insert(failedRelays.end(), failures.begin(), failures.end()); + } + + return make_tuple(successfulRelays, failedRelays); + }); + closeFutures.push_back(move(closeFuture)); + } + + for (auto& closeFuture : closeFutures) + { + auto [successes, failures] = closeFuture.get(); + successfulRelays.insert(successfulRelays.end(), successes.begin(), successes.end()); + failedRelays.insert(failedRelays.end(), failures.begin(), failures.end()); + } + + size_t targetCount = relays.size(); + size_t successfulCount = successfulRelays.size(); + PLOG_INFO << "Sent close requests to " << successfulCount << "/" << targetCount << " open relay connections."; + + return make_tuple(successfulRelays, failedRelays); +}; + RelayList NostrService::getConnectedRelays(RelayList relays) { PLOG_VERBOSE << "Identifying connected relays."; -- cgit