package Ġio . k ola . events Ċ Ċ import Ġjava . util .* Ċ Ċ class ĠEventHandler Ġ{ ĊĠĠĠ Ġprivate Ġval Ġhandlers Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĠĠĠ Ġprivate Ġval Ġhandlers By Token Ġ= Ġmutable Map Of < String , Ġ() Ġ-> ĠUnit >() ĊĊĠĠĠ Ġoperator Ġfun Ġset ( key : ĠString , Ġhandler : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġin Ġhandlers By Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Handler Ġ= Ġhandlers By Token [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandlers . remove ( current Handler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhandlers Ġ+= Ġhandler ĊĠĠĠĠĠĠĠ Ġhandlers By Token [ key ] Ġ= Ġhandler ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( handler Ġin Ġhandlers ) Ġhandler () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( handler : Ġ() Ġ-> ĠUnit ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġin Ġhandlers By Token ) Ġreturn Ġregister ( handler ) ĊĠĠĠĠĠĠĠ Ġset ( token , Ġhandler ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtoken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunregister ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġhandlers By Token [ token ] ĊĠĠĠĠĠĠĠ Ġif Ġ( handler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandlers Ġ-= Ġhandler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandlers By Token Ġ-= Ġtoken ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus Assign ( handler : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġregister ( handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġminus Assign ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġunregister ( token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandlers . clear () ĊĠĠĠĠĠĠĠ Ġhandlers By Token . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunregister All () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( token , Ġ_) Ġin Ġhandlers By Token ) Ġunregister ( token ) ĊĠĠĠ Ġ} Ċ }