diff options
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 |