package Ġcom . github . func zz . rocket _ launcher . core . domain . service Ċ Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ import Ġkotlin . concurrent . thread Ċ import Ġkotlin . concurrent . with Lock Ċ Ċ class ĠCount down Timer ( ĊĠĠĠ Ġprivate Ġvar Ġcounter : ĠUInt Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġaborted : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠRe entrant Lock ( true ) ĊĊĠĠĠ Ġfun Ġabort ( f : Ġ( UInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaborted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ( counter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdecrement ( f : Ġ( UInt ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! abort ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ( counter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart ( f : Ġ( UInt ) Ġ-> ĠUnit ): ĠThread Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( counter Ġ> Ġ 0 u ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abort ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠOptional . empty < UInt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġif Ġ(! abort ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ-= Ġ 1 u ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . of ( counter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOptional . empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ( result . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĥķãĤ ¡ ãĥ³ ãĤ¯ ãĤ·ãĥ§ãĥ³ ãĤĴ Ġ< code > Re entrant Lock </ code > Ġãģ« ãĤĪ ãĤĭ æİĴ ä»ĸ åĪ¶ å¾ ¡ ä¸ĭ ãģ§ å®Łè¡Į ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ éĿŀ åħ¬ éĸĭ ãĥ¡ ãĤ½ãĥĥãĥī ĊĠĠĠĠ Ġ* Ġ@ param Ġfunction Ġ å®Łè¡Į ãģĻãĤĭ ãĥķãĤ ¡ ãĥ³ ãĤ¯ ãĤ·ãĥ§ãĥ³ ĊĠĠĠĠ Ġ* Ġ@ return ĠãĥķãĤ ¡ ãĥ³ ãĤ¯ ãĤ·ãĥ§ãĥ³ ãģ® å®Łè¡Į çµĲæŀľ ãĤĴ è¿Ķ ãģĻ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R > Ġwith Lock ( function : Ġ() Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlock . with Lock ( function ) ĊĠĠĠ Ġ} Ċ }