From ac58f99560bd3b38f80738b3c26562beda813f17 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 07:58:12 -0300 Subject: [PATCH 01/15] Added sendAndWaitForResponse to Client.kt --- .../vitorpamplona/ammolite/relays/Client.kt | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 12bc0a62f..f9d5bb1c3 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -29,6 +29,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.util.UUID +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit /** * The Nostr Client manages multiple personae the user may switch between. Events are received and @@ -130,6 +132,68 @@ object Client : RelayPool.Listener { RelayPool.sendFilter(subscriptionId, filters) } + fun sendAndWaitForResponse( + signedEvent: EventInterface, + relay: String? = null, + feedTypes: Set? = null, + relayList: List? = null, + onDone: (() -> Unit)? = null, + timeoutInSeconds: Long = 30, + ) { + checkNotInMainThread() + + val size = if (relay != null) 1 else relayList?.size ?: RelayPool.availableRelays() + val latch = CountDownLatch(size) + + Log.d("Relay", "Waiting for $size responses") + + subscribe( + object : Listener() { + override fun onEvent( + event: Event, + subscriptionId: String, + relay: Relay, + afterEOSE: Boolean, + ) { + if (event.id() == signedEvent.id()) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Received response for ${event.id()} relay ${relay.url} count: ${latch.count}") + } + } + + override fun onError(error: Error, subscriptionId: String, relay: Relay) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Error from relay ${relay.url} count: ${latch.count} error: $error") + } + + override fun onRelayStateChange( + type: Relay.StateType, + relay: Relay, + subscriptionId: String?, + ) { + if (type == Relay.StateType.DISCONNECT) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Disconnected from relay ${relay.url} count: ${latch.count}") + } + } + + override fun onSendResponse(eventId: String, success: Boolean, message: String, relay: Relay) { + if (eventId == signedEvent.id()) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Received response for $eventId from relay ${relay.url} count: ${latch.count}") + } + } + }, + ) + + send(signedEvent, relay, feedTypes, relayList, onDone) + latch.await(timeoutInSeconds, TimeUnit.SECONDS) + } + fun sendFilterOnlyIfDisconnected( subscriptionId: String = UUID.randomUUID().toString().substring(0..10), filters: List = listOf(), From 04bf9c07ac7a5b8734a69f227760ef6c4deb6fec Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 08:05:04 -0300 Subject: [PATCH 02/15] fix lint --- .../com/vitorpamplona/ammolite/relays/Client.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index f9d5bb1c3..e41972900 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -162,7 +162,11 @@ object Client : RelayPool.Listener { } } - override fun onError(error: Error, subscriptionId: String, relay: Relay) { + override fun onError( + error: Error, + subscriptionId: String, + relay: Relay, + ) { unsubscribe(this) latch.countDown() Log.d("Relay", "Error from relay ${relay.url} count: ${latch.count} error: $error") @@ -180,7 +184,12 @@ object Client : RelayPool.Listener { } } - override fun onSendResponse(eventId: String, success: Boolean, message: String, relay: Relay) { + override fun onSendResponse( + eventId: String, + success: Boolean, + message: String, + relay: Relay, + ) { if (eventId == signedEvent.id()) { unsubscribe(this) latch.countDown() From e12569000086da61a86549d32c38efd5d211277e Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 10:50:59 -0300 Subject: [PATCH 03/15] add more logs, add optional listener, fix await call --- .../vitorpamplona/ammolite/relays/Client.kt | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index e41972900..53c663582 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -28,6 +28,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import java.util.UUID import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit @@ -132,44 +133,35 @@ object Client : RelayPool.Listener { RelayPool.sendFilter(subscriptionId, filters) } - fun sendAndWaitForResponse( + @OptIn(DelicateCoroutinesApi::class) + suspend fun sendAndWaitForResponse( signedEvent: EventInterface, relay: String? = null, feedTypes: Set? = null, relayList: List? = null, onDone: (() -> Unit)? = null, + additionalListener: Listener? = null, timeoutInSeconds: Long = 30, ) { checkNotInMainThread() val size = if (relay != null) 1 else relayList?.size ?: RelayPool.availableRelays() val latch = CountDownLatch(size) + val relayErrors = mutableMapOf() - Log.d("Relay", "Waiting for $size responses") + Log.d("sendAndWaitForResponse", "Waiting for $size responses") - subscribe( + val subscription = object : Listener() { - override fun onEvent( - event: Event, - subscriptionId: String, - relay: Relay, - afterEOSE: Boolean, - ) { - if (event.id() == signedEvent.id()) { - unsubscribe(this) - latch.countDown() - Log.d("Relay", "Received response for ${event.id()} relay ${relay.url} count: ${latch.count}") - } - } - override fun onError( error: Error, subscriptionId: String, relay: Relay, ) { - unsubscribe(this) - latch.countDown() - Log.d("Relay", "Error from relay ${relay.url} count: ${latch.count} error: $error") + relayErrors[relay.url]?.let { + latch.countDown() + } + Log.d("sendAndWaitForResponse", "onError Error from relay ${relay.url} count: ${latch.count} error: $error") } override fun onRelayStateChange( @@ -178,9 +170,8 @@ object Client : RelayPool.Listener { subscriptionId: String?, ) { if (type == Relay.StateType.DISCONNECT) { - unsubscribe(this) latch.countDown() - Log.d("Relay", "Disconnected from relay ${relay.url} count: ${latch.count}") + Log.d("sendAndWaitForResponse", "onRelayStateChange Disconnected from relay ${relay.url} count: ${latch.count}") } } @@ -191,16 +182,27 @@ object Client : RelayPool.Listener { relay: Relay, ) { if (eventId == signedEvent.id()) { - unsubscribe(this) latch.countDown() - Log.d("Relay", "Received response for $eventId from relay ${relay.url} count: ${latch.count}") + Log.d("sendAndWaitForResponse", "onSendResponse Received response for $eventId from relay ${relay.url} count: ${latch.count} message $message success $success") } } - }, - ) + } - send(signedEvent, relay, feedTypes, relayList, onDone) - latch.await(timeoutInSeconds, TimeUnit.SECONDS) + subscribe(subscription) + additionalListener?.let { subscribe(it) } + + val job = + GlobalScope.launch(Dispatchers.IO) { + send(signedEvent, relay, feedTypes, relayList, onDone) + } + job.join() + + runBlocking { + latch.await(timeoutInSeconds, TimeUnit.SECONDS) + } + Log.d("sendAndWaitForResponse", "countdown finished") + unsubscribe(subscription) + additionalListener?.let { unsubscribe(it) } } fun sendFilterOnlyIfDisconnected( From 35423e1bb6562ca4256cb711b787e2dc1bb181a6 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 10:52:36 -0300 Subject: [PATCH 04/15] change default timeout to 15 seconds --- .../src/main/java/com/vitorpamplona/ammolite/relays/Client.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 53c663582..12ef2ce52 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -141,7 +141,7 @@ object Client : RelayPool.Listener { relayList: List? = null, onDone: (() -> Unit)? = null, additionalListener: Listener? = null, - timeoutInSeconds: Long = 30, + timeoutInSeconds: Long = 15, ) { checkNotInMainThread() From 59b3ff1b940a30683b902b5773027e2598b9667c Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 07:58:12 -0300 Subject: [PATCH 05/15] Added sendAndWaitForResponse to Client.kt --- .../vitorpamplona/ammolite/relays/Client.kt | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 12bc0a62f..f9d5bb1c3 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -29,6 +29,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.util.UUID +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit /** * The Nostr Client manages multiple personae the user may switch between. Events are received and @@ -130,6 +132,68 @@ object Client : RelayPool.Listener { RelayPool.sendFilter(subscriptionId, filters) } + fun sendAndWaitForResponse( + signedEvent: EventInterface, + relay: String? = null, + feedTypes: Set? = null, + relayList: List? = null, + onDone: (() -> Unit)? = null, + timeoutInSeconds: Long = 30, + ) { + checkNotInMainThread() + + val size = if (relay != null) 1 else relayList?.size ?: RelayPool.availableRelays() + val latch = CountDownLatch(size) + + Log.d("Relay", "Waiting for $size responses") + + subscribe( + object : Listener() { + override fun onEvent( + event: Event, + subscriptionId: String, + relay: Relay, + afterEOSE: Boolean, + ) { + if (event.id() == signedEvent.id()) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Received response for ${event.id()} relay ${relay.url} count: ${latch.count}") + } + } + + override fun onError(error: Error, subscriptionId: String, relay: Relay) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Error from relay ${relay.url} count: ${latch.count} error: $error") + } + + override fun onRelayStateChange( + type: Relay.StateType, + relay: Relay, + subscriptionId: String?, + ) { + if (type == Relay.StateType.DISCONNECT) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Disconnected from relay ${relay.url} count: ${latch.count}") + } + } + + override fun onSendResponse(eventId: String, success: Boolean, message: String, relay: Relay) { + if (eventId == signedEvent.id()) { + unsubscribe(this) + latch.countDown() + Log.d("Relay", "Received response for $eventId from relay ${relay.url} count: ${latch.count}") + } + } + }, + ) + + send(signedEvent, relay, feedTypes, relayList, onDone) + latch.await(timeoutInSeconds, TimeUnit.SECONDS) + } + fun sendFilterOnlyIfDisconnected( subscriptionId: String = UUID.randomUUID().toString().substring(0..10), filters: List = listOf(), From 62a2cba18b170b99640c1a53156436c653153406 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 08:05:04 -0300 Subject: [PATCH 06/15] fix lint --- .../com/vitorpamplona/ammolite/relays/Client.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index f9d5bb1c3..e41972900 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -162,7 +162,11 @@ object Client : RelayPool.Listener { } } - override fun onError(error: Error, subscriptionId: String, relay: Relay) { + override fun onError( + error: Error, + subscriptionId: String, + relay: Relay, + ) { unsubscribe(this) latch.countDown() Log.d("Relay", "Error from relay ${relay.url} count: ${latch.count} error: $error") @@ -180,7 +184,12 @@ object Client : RelayPool.Listener { } } - override fun onSendResponse(eventId: String, success: Boolean, message: String, relay: Relay) { + override fun onSendResponse( + eventId: String, + success: Boolean, + message: String, + relay: Relay, + ) { if (eventId == signedEvent.id()) { unsubscribe(this) latch.countDown() From d0190c87a2b5f9e7b69d480a672ccec1c27573d7 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 10:50:59 -0300 Subject: [PATCH 07/15] add more logs, add optional listener, fix await call --- .../vitorpamplona/ammolite/relays/Client.kt | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index e41972900..53c663582 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -28,6 +28,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import java.util.UUID import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit @@ -132,44 +133,35 @@ object Client : RelayPool.Listener { RelayPool.sendFilter(subscriptionId, filters) } - fun sendAndWaitForResponse( + @OptIn(DelicateCoroutinesApi::class) + suspend fun sendAndWaitForResponse( signedEvent: EventInterface, relay: String? = null, feedTypes: Set? = null, relayList: List? = null, onDone: (() -> Unit)? = null, + additionalListener: Listener? = null, timeoutInSeconds: Long = 30, ) { checkNotInMainThread() val size = if (relay != null) 1 else relayList?.size ?: RelayPool.availableRelays() val latch = CountDownLatch(size) + val relayErrors = mutableMapOf() - Log.d("Relay", "Waiting for $size responses") + Log.d("sendAndWaitForResponse", "Waiting for $size responses") - subscribe( + val subscription = object : Listener() { - override fun onEvent( - event: Event, - subscriptionId: String, - relay: Relay, - afterEOSE: Boolean, - ) { - if (event.id() == signedEvent.id()) { - unsubscribe(this) - latch.countDown() - Log.d("Relay", "Received response for ${event.id()} relay ${relay.url} count: ${latch.count}") - } - } - override fun onError( error: Error, subscriptionId: String, relay: Relay, ) { - unsubscribe(this) - latch.countDown() - Log.d("Relay", "Error from relay ${relay.url} count: ${latch.count} error: $error") + relayErrors[relay.url]?.let { + latch.countDown() + } + Log.d("sendAndWaitForResponse", "onError Error from relay ${relay.url} count: ${latch.count} error: $error") } override fun onRelayStateChange( @@ -178,9 +170,8 @@ object Client : RelayPool.Listener { subscriptionId: String?, ) { if (type == Relay.StateType.DISCONNECT) { - unsubscribe(this) latch.countDown() - Log.d("Relay", "Disconnected from relay ${relay.url} count: ${latch.count}") + Log.d("sendAndWaitForResponse", "onRelayStateChange Disconnected from relay ${relay.url} count: ${latch.count}") } } @@ -191,16 +182,27 @@ object Client : RelayPool.Listener { relay: Relay, ) { if (eventId == signedEvent.id()) { - unsubscribe(this) latch.countDown() - Log.d("Relay", "Received response for $eventId from relay ${relay.url} count: ${latch.count}") + Log.d("sendAndWaitForResponse", "onSendResponse Received response for $eventId from relay ${relay.url} count: ${latch.count} message $message success $success") } } - }, - ) + } - send(signedEvent, relay, feedTypes, relayList, onDone) - latch.await(timeoutInSeconds, TimeUnit.SECONDS) + subscribe(subscription) + additionalListener?.let { subscribe(it) } + + val job = + GlobalScope.launch(Dispatchers.IO) { + send(signedEvent, relay, feedTypes, relayList, onDone) + } + job.join() + + runBlocking { + latch.await(timeoutInSeconds, TimeUnit.SECONDS) + } + Log.d("sendAndWaitForResponse", "countdown finished") + unsubscribe(subscription) + additionalListener?.let { unsubscribe(it) } } fun sendFilterOnlyIfDisconnected( From 80c369a6ae0ece9772440673b1e1bb93e2b1f4f6 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 10:52:36 -0300 Subject: [PATCH 08/15] change default timeout to 15 seconds --- .../src/main/java/com/vitorpamplona/ammolite/relays/Client.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 53c663582..12ef2ce52 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -141,7 +141,7 @@ object Client : RelayPool.Listener { relayList: List? = null, onDone: (() -> Unit)? = null, additionalListener: Listener? = null, - timeoutInSeconds: Long = 30, + timeoutInSeconds: Long = 15, ) { checkNotInMainThread() From cbd8acbd0167499b8cd8f0b364e3323441f83c14 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 11:14:31 -0300 Subject: [PATCH 09/15] check eose too --- .../src/main/java/com/vitorpamplona/ammolite/relays/Client.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 12ef2ce52..78f07b6b7 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -169,7 +169,7 @@ object Client : RelayPool.Listener { relay: Relay, subscriptionId: String?, ) { - if (type == Relay.StateType.DISCONNECT) { + if (type == Relay.StateType.DISCONNECT || type == Relay.StateType.EOSE) { latch.countDown() Log.d("sendAndWaitForResponse", "onRelayStateChange Disconnected from relay ${relay.url} count: ${latch.count}") } From de852390469dc83f30b36081e76942da579bc5c5 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 11:56:30 -0300 Subject: [PATCH 10/15] check if listeners work now --- .../main/java/com/vitorpamplona/ammolite/relays/Client.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 78f07b6b7..90023ee6b 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -281,6 +281,7 @@ object Client : RelayPool.Listener { // } } + @OptIn(DelicateCoroutinesApi::class) override fun onSendResponse( eventId: String, success: Boolean, @@ -294,6 +295,7 @@ object Client : RelayPool.Listener { } } + @OptIn(DelicateCoroutinesApi::class) override fun onAuth( relay: Relay, challenge: String, @@ -303,6 +305,7 @@ object Client : RelayPool.Listener { GlobalScope.launch(Dispatchers.Default) { listeners.forEach { it.onAuth(relay, challenge) } } } + @OptIn(DelicateCoroutinesApi::class) override fun onNotify( relay: Relay, description: String, @@ -314,6 +317,7 @@ object Client : RelayPool.Listener { } } + @OptIn(DelicateCoroutinesApi::class) override fun onSend( relay: Relay, msg: String, @@ -324,6 +328,7 @@ object Client : RelayPool.Listener { } } + @OptIn(DelicateCoroutinesApi::class) override fun onBeforeSend( relay: Relay, event: EventInterface, @@ -333,6 +338,7 @@ object Client : RelayPool.Listener { } } + @OptIn(DelicateCoroutinesApi::class) override fun onError( error: Error, subscriptionId: String, From eba6d03b53ebd877fa9cd2902469305a66b151ab Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 12:17:26 -0300 Subject: [PATCH 11/15] check if listeners work now --- .../main/java/com/vitorpamplona/ammolite/relays/Client.kt | 6 +++--- .../com/vitorpamplona/ammolite/relays/NostrDataSource.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 90023ee6b..1408615ba 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -113,7 +113,7 @@ object Client : RelayPool.Listener { checkNotInMainThread() subscribe( - object : Listener() { + object : Listener { override fun onEvent( event: Event, subId: String, @@ -152,7 +152,7 @@ object Client : RelayPool.Listener { Log.d("sendAndWaitForResponse", "Waiting for $size responses") val subscription = - object : Listener() { + object : Listener { override fun onError( error: Error, subscriptionId: String, @@ -363,7 +363,7 @@ object Client : RelayPool.Listener { fun getSubscriptionFilters(subId: String): List = subscriptions[subId] ?: emptyList() - abstract class Listener { + interface Listener { /** A new message was received */ open fun onEvent( event: Event, diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt index 82fa8ed8b..d49a53040 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/NostrDataSource.kt @@ -67,7 +67,7 @@ abstract class NostrDataSource( ): Int = 31 * str1.hashCode() + str2.hashCode() private val clientListener = - object : Client.Listener() { + object : Client.Listener { override fun onEvent( event: Event, subscriptionId: String, From 5cf8b5aa1220d930706ba7e7addb97bec38e5a6c Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 12:49:04 -0300 Subject: [PATCH 12/15] change proguard to see if now the client.listener works --- ammolite/consumer-rules.pro | 45 +++++++++++++++++++++++++++++++++++++ ammolite/proguard-rules.pro | 21 +++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/ammolite/consumer-rules.pro b/ammolite/consumer-rules.pro index e69de29bb..2338beda6 100644 --- a/ammolite/consumer-rules.pro +++ b/ammolite/consumer-rules.pro @@ -0,0 +1,45 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile +# preserve the line number information for debugging stack traces. +-dontobfuscate +-keepattributes LocalVariableTable +-keepattributes LocalVariableTypeTable +-keepattributes *Annotation* +-keepattributes SourceFile +-keepattributes LineNumberTable +-keepattributes Signature +-keepattributes Exceptions +-keepattributes InnerClasses +-keepattributes EnclosingMethod +-keepattributes MethodParameters +-keepparameternames + +-keepdirectories libs + +# Keep all names +-keepnames class ** { *; } + +# Keep All enums +-keep enum ** { *; } + +-keep class com.vitorpamplona.ammolite.service.** { *; } +-keep class com.vitorpamplona.ammolite.relays.** { *; } \ No newline at end of file diff --git a/ammolite/proguard-rules.pro b/ammolite/proguard-rules.pro index f2c80152a..2338beda6 100644 --- a/ammolite/proguard-rules.pro +++ b/ammolite/proguard-rules.pro @@ -19,6 +19,27 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile +# preserve the line number information for debugging stack traces. +-dontobfuscate +-keepattributes LocalVariableTable +-keepattributes LocalVariableTypeTable +-keepattributes *Annotation* +-keepattributes SourceFile +-keepattributes LineNumberTable +-keepattributes Signature +-keepattributes Exceptions +-keepattributes InnerClasses +-keepattributes EnclosingMethod +-keepattributes MethodParameters +-keepparameternames + +-keepdirectories libs + +# Keep all names +-keepnames class ** { *; } + +# Keep All enums +-keep enum ** { *; } -keep class com.vitorpamplona.ammolite.service.** { *; } -keep class com.vitorpamplona.ammolite.relays.** { *; } \ No newline at end of file From 3f3367258f34e0ec5909665c8dd958027e1339dc Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 19 Jul 2024 13:29:09 -0300 Subject: [PATCH 13/15] return true if at least one relay replied with success --- .../main/java/com/vitorpamplona/ammolite/relays/Client.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 1408615ba..8e5a10eda 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -142,12 +142,13 @@ object Client : RelayPool.Listener { onDone: (() -> Unit)? = null, additionalListener: Listener? = null, timeoutInSeconds: Long = 15, - ) { + ): Boolean { checkNotInMainThread() val size = if (relay != null) 1 else relayList?.size ?: RelayPool.availableRelays() val latch = CountDownLatch(size) val relayErrors = mutableMapOf() + var result = false Log.d("sendAndWaitForResponse", "Waiting for $size responses") @@ -182,6 +183,9 @@ object Client : RelayPool.Listener { relay: Relay, ) { if (eventId == signedEvent.id()) { + if (success) { + result = true + } latch.countDown() Log.d("sendAndWaitForResponse", "onSendResponse Received response for $eventId from relay ${relay.url} count: ${latch.count} message $message success $success") } @@ -203,6 +207,7 @@ object Client : RelayPool.Listener { Log.d("sendAndWaitForResponse", "countdown finished") unsubscribe(subscription) additionalListener?.let { unsubscribe(it) } + return result } fun sendFilterOnlyIfDisconnected( From 754a1b3a8793dd58d4b6f49caca5f7faf7586ba8 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 22 Jul 2024 07:33:21 -0300 Subject: [PATCH 14/15] change the log of onRelayStateChange --- .../src/main/java/com/vitorpamplona/ammolite/relays/Client.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index 8e5a10eda..d36e95688 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -172,8 +172,8 @@ object Client : RelayPool.Listener { ) { if (type == Relay.StateType.DISCONNECT || type == Relay.StateType.EOSE) { latch.countDown() - Log.d("sendAndWaitForResponse", "onRelayStateChange Disconnected from relay ${relay.url} count: ${latch.count}") } + Log.d("sendAndWaitForResponse", "onRelayStateChange ${type.name} from relay ${relay.url} count: ${latch.count}") } override fun onSendResponse( From e764ebbcb25ef6e8da1f1575ce2765bde5688a05 Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 22 Jul 2024 07:49:54 -0300 Subject: [PATCH 15/15] if the relay just connected send the event --- .../src/main/java/com/vitorpamplona/ammolite/relays/Client.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt index d36e95688..d93dd45f0 100644 --- a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/Client.kt @@ -173,6 +173,10 @@ object Client : RelayPool.Listener { if (type == Relay.StateType.DISCONNECT || type == Relay.StateType.EOSE) { latch.countDown() } + if (type == Relay.StateType.CONNECT) { + Log.d("sendAndWaitForResponse", "${type.name} Sending event to relay ${relay.url} count: ${latch.count}") + relay.sendOverride(signedEvent) + } Log.d("sendAndWaitForResponse", "onRelayStateChange ${type.name} from relay ${relay.url} count: ${latch.count}") }