- Notifications
You must be signed in to change notification settings - Fork0
Multi-keys, multi-producers, single-consumer event bus backed by kotlinx.coroutines.channels.Channels
License
Kotlin-Android-Open-Source/kotlin-channel-event-bus
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
TODO - TBD - WIP
Multi-keys, multi-producers, single-consumer event bus backed bykotlinx.coroutines.channels.Channel
s.
A Kotlin Multiplatform library that provides a simple event bus implementation using
kotlinx.coroutines.channels.Channel
s.This is useful for UI applications where you want to send events to communicate betweendifferent parts / scope of your application.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 aChannel
to send events to and aFlow
to receive events from.The
Channel
is unbounded (Channel.UNLIMITED
- default) or conflatedChannel.CONFLATED
.TheFlow
is cold and only one collector is allowed at a time.This make sure all events are consumed.
Author:Petrus Nguyễn Thái Học
Liked some of my work? Buy me a coffee (or more likely a beer)
// Create your event typedata classAwesomeEvent(valpayload:Int) : ChannelEvent<AwesomeEvent> {overrideval key get()=Keycompanionobject Key : ChannelEventKey<AwesomeEvent>(AwesomeEvent::class)}// Create your bus instanceval bus=ChannelEventBus()// Send events to the busbus.send(AwesomeEvent(1))bus.send(AwesomeEvent(2))bus.send(AwesomeEvent(3))// Receive events from the busbus .receiveAsFlow(AwesomeEvent)// or bus.receiveAsFlow(AwesomeEvent.Key) if you want to be explicit .collect { e:AwesomeEvent->println(e) }
jvm
/android
.js
(IR
).Darwin
targets:iosArm64
,iosArm32
,iosX64
,iosSimulatorArm64
.watchosArm32
,watchosArm64
,watchosX64
,watchosX86
,watchosSimulatorArm64
.tvosX64
,tvosSimulatorArm64
,tvosArm64
.macosX64
,macosArm64
.
TODO - TBD - WIP
Android Compose sample:an Android app using Compose UI to show how to use the library.It has two nested navigation graphs:
RegisterScreen
andHomeScreen
.In
RegisterScreen
, we have 3 steps (3 screens) to allow user to input their information, step bystep.A
RegisterSharedViewModel
(bound toRegisterScreen
navigation graph scope) is usedto hold the whole state of the registration process.It observes events from theChannelEventBus
and update the state accordingly.Each step screen has a
ViewModel
to hold the state of the screen, and will send events totheChannelEventBus
,then theRegisterSharedViewModel
will receive those events and update the state.
TODO - TBD - WIP
TODO - TBD - WIP
About
Multi-keys, multi-producers, single-consumer event bus backed by kotlinx.coroutines.channels.Channels
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Languages
- Kotlin99.1%
- Shell0.9%