From c73546ca553143353bf1c7bd52643c46fdcc003d Mon Sep 17 00:00:00 2001 From: Muzzammil Shahid Date: Mon, 28 Oct 2024 13:49:55 +0500 Subject: [PATCH 1/2] Cancel coroutine after receiving goodbye --- src/main/kotlin/io/xconn/xconn/Session.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/io/xconn/xconn/Session.kt b/src/main/kotlin/io/xconn/xconn/Session.kt index 39769da..e97963d 100644 --- a/src/main/kotlin/io/xconn/xconn/Session.kt +++ b/src/main/kotlin/io/xconn/xconn/Session.kt @@ -71,15 +71,16 @@ class Session(private val baseSession: BaseSession) { val goodbyeMsg = Goodbye(mapOf(), closeCloseRealm) val data = wampSession.sendMessage(goodbyeMsg) baseSession.send(data) - coroutineScope.cancel() try { withTimeout(10_000L) { goodbyeRequest.await() } } catch (e: TimeoutCancellationException) { + coroutineScope.cancel() baseSession.close() } finally { + coroutineScope.cancel() baseSession.close() } } From 7b61a19d3ec8ea29855e54b81c4175ec3fb08f40 Mon Sep 17 00:00:00 2001 From: Muzzammil Shahid Date: Mon, 28 Oct 2024 13:50:23 +0500 Subject: [PATCH 2/2] Receive message only if coroutine is active --- src/main/kotlin/io/xconn/xconn/Session.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/io/xconn/xconn/Session.kt b/src/main/kotlin/io/xconn/xconn/Session.kt index e97963d..ee6da44 100644 --- a/src/main/kotlin/io/xconn/xconn/Session.kt +++ b/src/main/kotlin/io/xconn/xconn/Session.kt @@ -23,6 +23,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.cancel +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import kotlinx.coroutines.withTimeout import kotlin.coroutines.cancellation.CancellationException @@ -49,7 +50,7 @@ class Session(private val baseSession: BaseSession) { init { coroutineScope.launch { - while (true) { + while (isActive) { try { val message = baseSession.receive() processIncomingMessage(wampSession.receive(message))