package Ġcom . lambda . event . event bus Ċ Ċ import Ġcom . lambda . event . Listener Manager Ċ import Ġcom . lambda . event . listener . Listener Ċ Ċ /** Ċ Ġ* Ġ[ I EventBus ] Ġwith Ġsome Ġbasic Ġimplementation Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract EventBus Ġ: ĠI EventBus Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( objs : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ ĠListener Manager . get Listeners ( objs )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribed Listeners . get Or Put ( it . event Class , Ġ:: new Set ). add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunsubscribe ( objs : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ ĠListener Manager . get Listeners ( objs )?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribed Listeners [ it . event Class ]?. remove ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost ( event : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubscribed Listeners [ event . java Class ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġ// ĠIDE Ġme me ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġit ) Ġ( listener Ġas ĠListener < Any >). function . invoke ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }