Skip to content
Snippets Groups Projects
Verified Commit 02c74d58 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Improve reconnect handling

parent d3f88ec6
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -338,15 +338,13 @@ class QuasselService : DaggerLifecycleService(), ...@@ -338,15 +338,13 @@ class QuasselService : DaggerLifecycleService(),
} }
}) })
var wasEverConnected = false
connectivity connectivity
.delay(200, TimeUnit.MILLISECONDS) .delay(200, TimeUnit.MILLISECONDS)
.throttleFirst(1, TimeUnit.SECONDS) .throttleFirst(1, TimeUnit.SECONDS)
.toLiveData() .toLiveData()
.observe(this, Observer { .observe(this, Observer {
handlerService.backend { handlerService.backend {
if (wasEverConnected && !sessionManager.hasErrored) sessionManager.autoReconnect(true)
sessionManager.reconnect(true)
} }
}) })
...@@ -358,12 +356,7 @@ class QuasselService : DaggerLifecycleService(), ...@@ -358,12 +356,7 @@ class QuasselService : DaggerLifecycleService(),
.observe( .observe(
this, Observer { this, Observer {
handlerService.backend { handlerService.backend {
if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) { sessionManager.autoReconnect()
if (wasEverConnected && !sessionManager.hasErrored)
sessionManager.reconnect()
} else {
wasEverConnected = true
}
} }
}) })
......
...@@ -98,9 +98,17 @@ class SessionManager( ...@@ -98,9 +98,17 @@ class SessionManager(
Invokers Invokers
} }
fun ifClosed(closure: (ISession) -> Unit) {
state.or(ConnectionState.DISCONNECTED).let {
if (it == ConnectionState.CLOSED) {
closure(inProgressSession.value)
}
}
}
fun ifDisconnected(closure: (ISession) -> Unit) { fun ifDisconnected(closure: (ISession) -> Unit) {
state.or(ConnectionState.DISCONNECTED).let { state.or(ConnectionState.DISCONNECTED).let {
if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) { if (it == ConnectionState.CLOSED || it == ConnectionState.DISCONNECTED) {
closure(inProgressSession.value) closure(inProgressSession.value)
} }
} }
...@@ -138,6 +146,14 @@ class SessionManager( ...@@ -138,6 +146,14 @@ class SessionManager(
) )
} }
fun autoReconnect(forceReconnect: Boolean = false) {
if (!hasErrored) {
ifClosed {
reconnect(forceReconnect)
}
}
}
fun reconnect(forceReconnect: Boolean = false) { fun reconnect(forceReconnect: Boolean = false) {
if (lastShouldReconnect || forceReconnect) { if (lastShouldReconnect || forceReconnect) {
val clientData = lastClientData val clientData = lastClientData
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment