A Kotlin Multiplatform library that provides a simple event bus implementation using KotlinX Coroutines Channels. Multi-keys, multi-producers, single-consumer and thread-safe event bus backed by kotlinx.coroutines.channels.Channels
kotlinx.coroutines.channels.Channels.A Kotlin Multiplatform library that provides a simple event bus implementation using
kotlinx.coroutines.channels.Channels.
This is useful for UI applications where you want to send events to communicate between
different parts / scope of your application (e.g. send results from one screen to another).
This bus is thread-safe to be used by multiple threads. It is safe to send events from multiple threads without any synchronization.
ChannelEvent.Key will be used to identify a bus for a specific type of events.
Each bus has a Channel to send events to and a Flow to receive events from.
The Channel is unbounded (Channel.UNLIMITED - default) or conflated Channel.CONFLATED.
The Flow is cold and only one collector is allowed at a time.
This makes sure all events are consumed.
Like some of my work? Could you buy me a coffee (or more likely a beer)?
<a href="https://www.buymeacoffee.com/hoc081098" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" height=64></a>
0.x release docs: https://kotlin-multiplatform-foundation.github.io/kotlin-channel-event-bus/docs/0.xallprojects {
repositories {
[...]
mavenCentral()
}
}
implementation("io.github.hoc081098:channel-event-bus:0.1.0")
allprojects {
repositories {
[...]
maven(url = "https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
}
dependencies {
implementation("io.github.hoc081098:channel-event-bus:0.1.1-SNAPSHOT")
}
allprojects {
repositories {
[...]
maven { url "https://s01.oss.sonatype.org/content/repositories/snapshots/" }
}
}
dependencies {
implementation 'io.github.hoc081098:channel-event-bus:0.1.1-SNAPSHOT'
}
// Create your event type
data class AwesomeEvent(val payload: Int) : ChannelEvent<AwesomeEvent> {
override val key get() = Key
companion object Key : ChannelEventKey<AwesomeEvent>(AwesomeEvent::class)
}
// Create your bus instance
val bus = ChannelEventBus()
// Send events to the bus
bus.send(AwesomeEvent(1))
bus.send(AwesomeEvent(2))
bus.send(AwesomeEvent(3))
// Receive events from the bus
bus
.receiveAsFlow(AwesomeEvent) // or bus.receiveAsFlow(AwesomeEvent.Key) if you want to be explicit
.collect { e: AwesomeEvent -> println(e) }
jvm / android.js (IR).wasmJs.Darwin targets:
iosArm64, iosX64, iosSimulatorArm64.watchosArm32, watchosArm64, watchosX64, watchosSimulatorArm64, watchosDeviceArm64.tvosX64, tvosSimulatorArm64, tvosArm64.macosX64, macosArm64.mingwX64linuxX64, linuxArm64.androidNativeArm32, androidNativeArm64, androidNativeX86, androidNativeX64.Android Compose sample:
an Android app using Compose UI to show how to use the library.
It has two nested navigation graphs: Register and Home.
In Register, we have 3 steps (3 screens) to allow the user to input their information, step
by
step.
A RegisterSharedViewModel (bound to Register navigation graph scope) is used
to hold the whole state of the registration process.
It observes events from the ChannelEventBus and updates the state accordingly.
Each step screen has a ViewModel to hold the state of the screen and will send events to
the ChannelEventBus,
then the RegisterSharedViewModel will receive those events and update the state.
In the Home nav graph, we have 2 screens: Home and Detail.
The Home screen has a HomeViewModel to hold the results received from the Detail screen.
Those result events are sent from the Detail screen to the ChannelEventBus,
and the HomeViewModel will receive those events and update the state.
The Detail screen will send events to the ChannelEventBus when the user clicks on the button.
The HomeViewModel will receive those events and update the state.
https://github.com/Kotlin-Multiplatform-Foundation/kotlin-channel-event-bus/assets/36917223/80015232-d5b5-4fb2-a779-4e6113ddb8f8
wasm (depends on supported targets by kotlinx.coroutines) (since 0.1.0). Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
Standard MoltPulse indexed agent.