mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2024-09-30 00:40:49 +00:00
Minimizes costs of keeping track of the number of events received per subscription
This commit is contained in:
parent
6600a49564
commit
1aecd9cf45
@ -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}")
|
||||||
|
Loading…
Reference in New Issue
Block a user