Minimizes costs of keeping track of the number of events received per subscription

pull/844/head
Vitor Pamplona 2024-04-22 11:16:17 -04:00
rodzic 6600a49564
commit 1aecd9cf45
1 zmienionych plików z 13 dodań i 6 usunięć

Wyświetl plik

@ -43,9 +43,9 @@ abstract class NostrDataSource(val debugName: String) {
private var subscriptions = mapOf<String, Subscription>() private var subscriptions = mapOf<String, Subscription>()
data class Counter(var counter: Int) data class Counter(val subscriptionId: String, val eventKind: Int, var counter: Int)
private var eventCounter = mapOf<String, Counter>() private var eventCounter = mapOf<Int, Counter>()
var changingFilters = AtomicBoolean() var changingFilters = AtomicBoolean()
private var active: Boolean = false private var active: Boolean = false
@ -54,11 +54,18 @@ abstract class NostrDataSource(val debugName: String) {
eventCounter.forEach { eventCounter.forEach {
Log.d( Log.d(
"STATE DUMP ${this.javaClass.simpleName}", "STATE DUMP ${this.javaClass.simpleName}",
"Received Events ${it.key}: ${it.value.counter}", "Received Events $debugName ${it.value.subscriptionId} ${it.value.eventKind}: ${it.value.counter}",
) )
} }
} }
fun hashCodeFields(
str1: String,
str2: Int,
): Int {
return 31 * str1.hashCode() + str2.hashCode()
}
private val clientListener = private val clientListener =
object : Client.Listener() { object : Client.Listener() {
override fun onEvent( override fun onEvent(
@ -68,12 +75,12 @@ abstract class NostrDataSource(val debugName: String) {
afterEOSE: Boolean, afterEOSE: Boolean,
) { ) {
if (subscriptions.containsKey(subscriptionId)) { if (subscriptions.containsKey(subscriptionId)) {
val key = "$debugName $subscriptionId ${event.kind}" val key = hashCodeFields(subscriptionId, event.kind)
val keyValue = eventCounter.get(key) val keyValue = eventCounter[key]
if (keyValue != null) { if (keyValue != null) {
keyValue.counter++ keyValue.counter++
} else { } else {
eventCounter = eventCounter + Pair(key, Counter(1)) eventCounter = eventCounter + Pair(key, Counter(subscriptionId, event.kind, 1))
} }
// Log.d(this@NostrDataSource.javaClass.simpleName, "Relay ${relay.url}: ${event.kind}") // Log.d(this@NostrDataSource.javaClass.simpleName, "Relay ${relay.url}: ${event.kind}")