package ĠTim ers Ċ Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠTimer ( private Ġval Ġinterval : ĠLong ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġenabled Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġjob : ĠJob ĊĊĠĠĠ Ġfun Ġon ( name : String , Ġfunc : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ" timer ") Ġlisteners . add ( func ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( interval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( func Ġin Ġlisteners ) Ġfunc () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" timer Ġstart ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" timer Ġstop ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġfun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġtimer Ġ= ĠTimer ( 3 0 0 0 ) ĊĊĠĠĠ Ġtimer . on (" timer ") Ġ{ Ġprintln (" i 'm Ġhere ") Ġ} ĊĠĠĠ Ġtimer . on (" timer ") Ġ{ Ġprintln (" i 'm Ġhere Ġx 2 ") Ġ} ĊĠĠĠ Ġtimer . on (" not Ġa Ġtimer ") Ġ{ Ġprintln (" i 'm Ġnot Ġhere ") Ġ} ĊĊĠĠĠ Ġtimer . start () ĊĠĠĠ Ġdelay ( 2 0 0 0 ) ĊĠĠĠ Ġtimer . stop () ĊĠĠĠ Ġtimer . start () ĊĠĠĠ Ġdelay ( 1 0 0 0 0 ) Ċ } Ċ