package Ġio . github . li qi ha 0 . magic pen . workflow Ċ Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . filter Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠEvent Bus ( private Ġval Ġcoroutine Scope : ĠCor outine Scope ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġevent Flow Ġ= ĠMutable Shared Flow < Any >( replay Ġ= ĠInt . MAX _ VALUE ) ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġlisten ( k Class : ĠK Class < T >, Ġblock : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Flow . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Class . is Instance ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ Ġ@ Suppress (" unchecked _ cast ") Ġblock ( it Ġas ĠT ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpublish ( value : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking ( coroutine Scope . coroutine Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Flow . emit ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠEvent Bus . listen ( no inline Ġblock : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . listen ( T :: class , Ġblock ) Ċ }