diff options
author | Allan Wang <me@allanwang.ca> | 2019-02-06 12:12:10 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-06 12:12:10 -0500 |
commit | 91b7d53fb37b9939943c16b0bfd7a947d9f2363e (patch) | |
tree | 01d8feffb8e467bb19bc405c91e0cd4f66f8fe06 /app/src/main/kotlin/com/pitchedapps/frost/kotlin/CoroutineUtils.kt | |
parent | a75555f3464607b93d523478999b9c8a7dc224a0 (diff) | |
download | frost-91b7d53fb37b9939943c16b0bfd7a947d9f2363e.tar.gz frost-91b7d53fb37b9939943c16b0bfd7a947d9f2363e.tar.bz2 frost-91b7d53fb37b9939943c16b0bfd7a947d9f2363e.zip |
Fix/open broadcast (#1345)
* Convert jsi related channels to broadcasts
* Close channel in debug activity
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/kotlin/CoroutineUtils.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/kotlin/CoroutineUtils.kt | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/kotlin/CoroutineUtils.kt b/app/src/main/kotlin/com/pitchedapps/frost/kotlin/CoroutineUtils.kt new file mode 100644 index 00000000..0e09968d --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/kotlin/CoroutineUtils.kt @@ -0,0 +1,23 @@ +package com.pitchedapps.frost.kotlin + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.Job +import kotlinx.coroutines.channels.BroadcastChannel +import kotlinx.coroutines.launch +import kotlin.coroutines.CoroutineContext + +@UseExperimental(ExperimentalCoroutinesApi::class) +fun <T> BroadcastChannel<T>.subscribeDuringJob( + scope: CoroutineScope, + context: CoroutineContext, + onReceive: suspend (T) -> Unit +) { + val receiver = openSubscription() + scope.launch(context) { + for (r in receiver) { + onReceive(r) + } + } + scope.coroutineContext[Job]!!.invokeOnCompletion { receiver.cancel() } +}
\ No newline at end of file |