package Ġcom . n nt . core Ċ Ċ import Ġcom . n nt . gui . MainActivity Ċ Ċ interface ĠEvent Callback Ġ{ ĊĠĠĠ Ġfun Ġinvoke (); Ċ } Ċ Ċ class ĠEvent Slot ( cb : ĠEvent Callback ) Ġ{ ĊĠĠĠ Ġval Ġcb : ĠEvent Callback Ġ= Ġcb ĊĠĠĠ Ġvar Ġmain Ui Ġ= Ġfalse Ċ } Ċ Ċ open Ġclass ĠEvent Listener Ġ{ ĊĊĠĠĠ Ġfun Ġadd ( event : ĠString , Ġcb : ĠEvent Callback , Ġmain Ui : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ listeners . containsKey ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ listeners . set ( event , Ġmutable ListOf ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= ĠEvent Slot ( cb ) ĊĠĠĠĠĠĠĠ Ġslot . main Ui Ġ= Ġmain Ui ĊĠĠĠĠĠĠĠ Ġ_ listeners [ event ] !!. add ( slot ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġemit ( event : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ listeners . containsKey ( event )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ_ listeners [ event ] !!. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . main Ui ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġact Ġ= ĠMainActivity . shared ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġact . run On Ui Thread ( fun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cb . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . cb . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ listeners Ġ= Ġmutable Map Of < String , ĠMutable List < Event Slot >>() Ċ }