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