From 06b2ea1e8a19f754557ed21ceed24f88033950b9 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 19 Apr 2018 23:03:26 +0200 Subject: [PATCH] Close connection cleanly --- .../quasseldroid/service/QuasselService.kt | 18 +++++++++++------- .../libquassel/connection/CoreConnection.kt | 12 ++++++------ .../libquassel/util/nio/WrappedChannel.kt | 1 + 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt index 4a41bfaef..7a96a7c50 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt @@ -276,8 +276,10 @@ class QuasselService : DaggerLifecycleService(), .throttleFirst(1, TimeUnit.SECONDS) .toLiveData() .observe(this, Observer { - if (wasEverConnected && !sessionManager.hasErrored) - sessionManager.reconnect(true) + handlerService.backend { + if (wasEverConnected && !sessionManager.hasErrored) + sessionManager.reconnect(true) + } }) sessionManager.state @@ -287,11 +289,13 @@ class QuasselService : DaggerLifecycleService(), .toLiveData() .observe( this, Observer { - if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) { - if (wasEverConnected && !sessionManager.hasErrored) - sessionManager.reconnect() - } else { - wasEverConnected = true + handlerService.backend { + if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) { + if (wasEverConnected && !sessionManager.hasErrored) + sessionManager.reconnect() + } else { + wasEverConnected = true + } } }) diff --git a/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt index 83755afa7..e8b28e00a 100644 --- a/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt +++ b/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt @@ -127,10 +127,11 @@ class CoreConnection( override fun close() { try { setState(ConnectionState.CLOSED) + channel?.flush() + channel?.close() interrupt() } catch (e: Throwable) { - log(WARN, - TAG, "Error encountered while closing connection", e) + log(WARN, TAG, "Error encountered while closing connection", e) } } @@ -200,14 +201,13 @@ class CoreConnection( } } } + channel?.close() } catch (e: QuasselSecurityException) { close() securityExceptionCallback(e) } catch (e: Throwable) { - log(WARN, - TAG, "Error encountered in connection", e) - log(WARN, - TAG, "Last sent message: ${MessageRunnable.lastSent.get()}") + log(WARN, TAG, "Error encountered in connection", e) + log(WARN, TAG, "Last sent message: ${MessageRunnable.lastSent.get()}") close() } } diff --git a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt index 79f2c76b6..a7bd8957d 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt @@ -186,6 +186,7 @@ class WrappedChannel( rawIn = null rawOut?.close() rawOut = null + socket.close() } /** -- GitLab