From 8473ddcdbd6679aeb5ae8cb0cb5a95c3f25d2395 Mon Sep 17 00:00:00 2001 From: buttercat1791 Date: Mon, 6 May 2024 09:04:26 -0500 Subject: Test closing subscriptions --- src/nostr_service.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nostr_service.cpp b/src/nostr_service.cpp index 94904ac..6ffb06d 100644 --- a/src/nostr_service.cpp +++ b/src/nostr_service.cpp @@ -32,6 +32,8 @@ RelayList NostrService::defaultRelays() const { return this->_defaultRelays; }; RelayList NostrService::activeRelays() const { return this->_activeRelays; }; +unordered_map> NostrService::subscriptions() const { return this->_subscriptions; }; + RelayList NostrService::openRelayConnections() { return this->openRelayConnections(this->_defaultRelays); @@ -87,6 +89,9 @@ void NostrService::closeRelayConnections(RelayList relays) this->disconnect(relay); }); disconnectionThreads.push_back(move(disconnectionThread)); + + lock_guard lock(this->_propertyMutex); + this->_subscriptions.erase(relay); } for (thread& disconnectionThread : disconnectionThreads) @@ -286,8 +291,10 @@ string NostrService::queryRelays( vector>> requestFutures; for (const string relay : this->_activeRelays) { - lock_guard lock(this->_propertyMutex); + unique_lock lock(this->_propertyMutex); this->_subscriptions[relay].push_back(subscriptionId); + lock.unlock(); + future> requestFuture = async( [this, &relay, &request, &eventHandler, &eoseHandler, &closeHandler]() { @@ -350,6 +357,13 @@ tuple NostrService::closeSubscription(string subscriptionI if (isSuccess) { successfulRelays.push_back(relay); + + lock_guard lock(this->_propertyMutex); + auto it = find( + this->_subscriptions[relay].begin(), + this->_subscriptions[relay].end(), + subscriptionId); + this->_subscriptions[relay].erase(it); } else { @@ -382,7 +396,11 @@ tuple NostrService::closeSubscriptions(RelayList relays) RelayList successfulRelays; RelayList failedRelays; - for (const string& subscriptionId : this->_subscriptions[relay]) + unique_lock lock(this->_propertyMutex); + auto subscriptionIds = this->_subscriptions[relay]; + lock.unlock(); + + for (const string& subscriptionId : subscriptionIds) { auto [successes, failures] = this->closeSubscription(subscriptionId); successfulRelays.insert(successfulRelays.end(), successes.begin(), successes.end()); -- cgit