From 1c0ec93cbbec9bd25dcf19db5e0c86d804c562ed Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 2 Dec 2023 13:55:55 -0500 Subject: [PATCH] Testing the use of just one HttpClient for the entire app. --- .../vitorpamplona/amethyst/model/Account.kt | 7 +++--- .../amethyst/service/HttpClient.kt | 22 +++++++++++++++++-- .../amethyst/service/relays/Client.kt | 3 +-- .../amethyst/service/relays/Constants.kt | 3 +-- .../amethyst/service/relays/Relay.kt | 16 +++----------- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index e28e9cf2c..614089478 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -1772,7 +1772,7 @@ class Account( ?: Constants.defaultRelays.filter { defaultRelay -> defaultRelay.url == it.key }.firstOrNull()?.feedTypes ?: FeedType.values().toSet() - Relay(it.key, it.value.read, it.value.write, localFeedTypes, proxy) + Relay(it.key, it.value.read, it.value.write, localFeedTypes) } ?: return null // Ugly, but forces nostr.band as the only search-supporting relay today. @@ -1785,8 +1785,7 @@ class Account( it.url, it.read, it.write, - it.feedTypes, - proxy + it.feedTypes ) } } @@ -1796,7 +1795,7 @@ class Account( fun convertLocalRelays(): Array { return localRelays.map { - Relay(it.url, it.read, it.write, it.feedTypes, proxy) + Relay(it.url, it.read, it.write, it.feedTypes) }.toTypedArray() } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/HttpClient.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/HttpClient.kt index 0b8de8b66..a0a53815b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/HttpClient.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/HttpClient.kt @@ -14,6 +14,8 @@ object HttpClient { var proxyChangeListeners = ArrayList<() -> Unit>() var defaultTimeout = DEFAULT_TIMEOUT_ON_WIFI + var defaultHttpClient: OkHttpClient? = null + // fires off every time value of the property changes private var internalProxy: Proxy? by Delegates.observable(null) { _, oldValue, newValue -> if (oldValue != newValue) { @@ -24,13 +26,17 @@ object HttpClient { } fun start(proxy: Proxy?) { - this.internalProxy = proxy + if (internalProxy != proxy) { + this.internalProxy = proxy + this.defaultHttpClient = getHttpClient() + } } fun changeTimeouts(timeout: Duration) { Log.d("HttpClient", "Changing timeout to: $timeout") if (this.defaultTimeout.seconds != timeout.seconds) { this.defaultTimeout = timeout + this.defaultHttpClient = getHttpClient() } } @@ -42,11 +48,23 @@ object HttpClient { .readTimeout(duration) .connectTimeout(duration) .writeTimeout(duration) + .followRedirects(true) + .followSslRedirects(true) .build() } + fun getHttpClientForRelays(): OkHttpClient { + if (this.defaultHttpClient == null) { + this.defaultHttpClient = getHttpClient(defaultTimeout) + } + return defaultHttpClient!! + } + fun getHttpClient(): OkHttpClient { - return getHttpClient(defaultTimeout) + if (this.defaultHttpClient == null) { + this.defaultHttpClient = getHttpClient(defaultTimeout) + } + return defaultHttpClient!! } fun getProxy(): Proxy? { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt index 156ea4d3a..53d880a28 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Client.kt @@ -1,7 +1,6 @@ package com.vitorpamplona.amethyst.service.relays import android.util.Log -import com.vitorpamplona.amethyst.service.HttpClient import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.quartz.events.Event import com.vitorpamplona.quartz.events.EventInterface @@ -126,7 +125,7 @@ object Client : RelayPool.Listener { @OptIn(DelicateCoroutinesApi::class) private fun newSporadicRelay(url: String, feedTypes: Set?, onConnected: (Relay) -> Unit, onDone: (() -> Unit)?) { - val relay = Relay(url, true, true, feedTypes ?: emptySet(), HttpClient.getProxy()) + val relay = Relay(url, true, true, feedTypes ?: emptySet()) RelayPool.addRelay(relay) relay.connectAndRun { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt index 186bc3db5..feb5199d5 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Constants.kt @@ -1,7 +1,6 @@ package com.vitorpamplona.amethyst.service.relays import com.vitorpamplona.amethyst.model.RelaySetupInfo -import com.vitorpamplona.amethyst.service.HttpClient object Constants { val activeTypes = setOf(FeedType.FOLLOWS, FeedType.PRIVATE_DMS) @@ -11,7 +10,7 @@ object Constants { fun convertDefaultRelays(): Array { return defaultRelays.map { - Relay(it.url, it.read, it.write, it.feedTypes, HttpClient.getProxy()) + Relay(it.url, it.read, it.write, it.feedTypes) }.toTypedArray() } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt index 2db0bd446..58943944e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/relays/Relay.kt @@ -2,6 +2,7 @@ package com.vitorpamplona.amethyst.service.relays import android.util.Log import com.vitorpamplona.amethyst.BuildConfig +import com.vitorpamplona.amethyst.service.HttpClient import com.vitorpamplona.amethyst.service.checkNotInMainThread import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.events.Event @@ -9,13 +10,10 @@ import com.vitorpamplona.quartz.events.EventInterface import com.vitorpamplona.quartz.events.RelayAuthEvent import com.vitorpamplona.quartz.events.bytesUsedInMemory import com.vitorpamplona.quartz.utils.TimeUtils -import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response import okhttp3.WebSocket import okhttp3.WebSocketListener -import java.net.Proxy -import java.time.Duration import java.util.concurrent.atomic.AtomicBoolean enum class FeedType { @@ -28,22 +26,14 @@ class Relay( var url: String, var read: Boolean = true, var write: Boolean = true, - var activeTypes: Set = FeedType.values().toSet(), - proxy: Proxy? + var activeTypes: Set = FeedType.values().toSet() ) { companion object { // waits 3 minutes to reconnect once things fail const val RECONNECTING_IN_SECONDS = 60 * 3 } - private val httpClient = OkHttpClient.Builder() - .proxy(proxy) - .readTimeout(Duration.ofSeconds(if (proxy != null) 20L else 10L)) - .connectTimeout(Duration.ofSeconds(if (proxy != null) 20L else 10L)) - .writeTimeout(Duration.ofSeconds(if (proxy != null) 20L else 10L)) - .followRedirects(true) - .followSslRedirects(true) - .build() + private val httpClient = HttpClient.getHttpClientForRelays() private var listeners = setOf() private var socket: WebSocket? = null