Skip to content

Instantly share code, notes, and snippets.

@alaershov
Created September 15, 2023 09:11
Show Gist options
  • Save alaershov/5da291ea141e391b2e236b142c3fbdef to your computer and use it in GitHub Desktop.
Save alaershov/5da291ea141e391b2e236b142c3fbdef to your computer and use it in GitHub Desktop.
SharedEventFlow
/**
* Позволет эммитить сразу нескольким подписчикам все отправленные события.
* Ждёт, когда появится хотябы один подписчик, а затем отправляем ему все ивенты.
* credit: @aasitnikov
*/
class SharedEventFlow<T> : FlowCollector<T>, Flow<T> {
private val sharedFlow = MutableSharedFlow<T>()
override suspend fun emit(value: T) {
sharedFlow.subscriptionCount.first { it > 0 } // ждёт пока у sharedFlow появятся подписчики
sharedFlow.emit(value)
}
override suspend fun collect(collector: FlowCollector<T>) {
sharedFlow.collect(collector)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment