package Ġcn . g ong yin an . y ash a . utils Ċ Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Response Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . util . concurrent . atomic . Atomic Integer ĊĊ Ċ class ĠSpeed Recorder Ġ{ ĊĊĊĠĠĠ Ġprivate Ġvar Ġrecord Hs Ġ= ĠHashMap < Long , ĠInt >() ĊĊĠĠĠ Ġprivate Ġvar Ġstart Ts Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġprivate Ġval Ġcounter Ġ= ĠAtomicInteger ( 0 ) ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Ts Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġrecord Hs Ġ= ĠHashMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġadd ( num : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsec Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġrecord Hs [ sec ] Ġ= Ġ( record Hs [ sec ] Ġ?: Ġ 0 ) Ġ+ Ġnum ĊĠĠĠĠĠĠĠ Ġcounter . add AndGet ( num ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtotal (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcounter . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġspeed (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġms Ġ= Ġ( System . currentTimeMillis () Ġ- Ġstart Ts ). toDouble () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġcounter . get () Ġ/ Ġms Ġ* Ġ 1 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast One Min Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġ( record Hs [ current Ġ- Ġi ] Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast One Min Speed (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlast One Min Count (). toDouble () Ġ/ Ġ 6 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġspeed String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= Ġspeed () ĊĠĠĠĠĠĠĠ Ġval Ġspeed Ġ= Ġ( sp Ġ* Ġ 1 0 0 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ speed Ġ/ Ġ 1 0 0 0 0 . toDouble () }/ S " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 6 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremove Keys Ġ= Ġrecord Hs . keys . filter Ġ{ Ġk Ġ-> Ġk Ġ< Ġ( current Ġ- Ġ 1 0 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( remove Key Ġin Ġremove Keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord Hs . remove ( remove Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }