diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpWebSocket.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpWebSocket.kt index 476f17d12..e139631dd 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpWebSocket.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/okhttp/OkHttpWebSocket.kt @@ -40,6 +40,8 @@ class OkHttpWebSocket( fun buildRequest() = Request.Builder().url(url.url).build() override fun needsReconnect(): Boolean { + if (socket == null) return true + val myUsingOkHttp = usingOkHttp if (myUsingOkHttp == null) return true @@ -89,13 +91,19 @@ class OkHttpWebSocket( webSocket: okhttp3.WebSocket, code: Int, reason: String, - ) = out.onClosed(code, reason) + ) { + socket = null + out.onClosed(code, reason) + } override fun onFailure( webSocket: okhttp3.WebSocket, t: Throwable, response: Response?, - ) = out.onFailure(t, response?.code, response?.message) + ) { + socket = null + out.onFailure(t, response?.code, response?.message) + } } class Builder( @@ -111,6 +119,7 @@ class OkHttpWebSocket( override fun disconnect() { // uses cancel to kill the SEND stack that might be waiting socket?.cancel() + socket = null } override fun send(msg: String): Boolean = socket?.send(msg) ?: false diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/relay/client/single/basic/BasicRelayClient.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/relay/client/single/basic/BasicRelayClient.kt index 32c13aaeb..99fad140d 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/relay/client/single/basic/BasicRelayClient.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/relay/client/single/basic/BasicRelayClient.kt @@ -207,7 +207,8 @@ open class BasicRelayClient( code: Int?, response: String?, ) { - socket?.disconnect() // 1000, "Normal close" + // socket is already closed + // socket?.disconnect() // checks if this is an actual failure. Closing the socket generates an onFailure as well. if (!(socket == null && (t.message == "Socket is closed" || t.message == "Socket closed"))) {