aboutsummaryrefslogtreecommitdiff
path: root/src/nostr_service.cpp
diff options
context:
space:
mode:
authorLibravatar Michael Jurkoic <mjjurkoic@gmail.com>2024-03-17 19:12:30 -0500
committerLibravatar Michael Jurkoic <mjjurkoic@gmail.com>2024-03-17 19:12:30 -0500
commitc7096828e62fcea63120504b867150130377ab75 (patch)
treeeb8342be06550143d2349022f4b395f71f507f4a /src/nostr_service.cpp
parentfea9005732607ee58a4bcb113b1805028954498a (diff)
Provide methods to close all open subscriptions
Diffstat (limited to 'src/nostr_service.cpp')
-rw-r--r--src/nostr_service.cpp43
1 files changed, 43 insertions, 0 deletions
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<RelayList, RelayList> NostrService::closeSubscription(string subscriptionI
return make_tuple(successfulRelays, failedRelays);
};
+tuple<RelayList, RelayList> NostrService::closeSubscriptions()
+{
+ return this->closeSubscriptions(this->_activeRelays);
+};
+
+tuple<RelayList, RelayList> NostrService::closeSubscriptions(RelayList relays)
+{
+ RelayList successfulRelays;
+ RelayList failedRelays;
+
+ vector<future<tuple<RelayList, RelayList>>> closeFutures;
+ for (const string relay : relays)
+ {
+ future<tuple<RelayList, RelayList>> 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.";