/* Ċ Ġ* ĠCopyright Ġ 2 0 1 5 ĠN ich olas ĠB ily k Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . ac orn ui . jvm Ċ Ċ import Ġcom . ac orn ui . async . Deferred Ċ import Ġcom . ac orn ui . async . Pending Dis pos ables Registry Ċ import Ġcom . ac orn ui . async . Promise Ċ import Ġcom . ac orn ui . async . TimeoutException Ċ import Ġcom . ac orn ui . core . Disposable Ċ import Ġcom . ac orn ui . core . Up datable Child Base Ċ import Ġcom . ac orn ui . core . time . Time Driver Ċ import Ġcom . ac orn ui . unc a ught ExceptionHandler Ċ import Ġjava . util . concurrent . Callable Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Future Ċ Ċ private Ġval Ġexecutor Ġby Ġlazy Ġ{ Ċ ĉ val Ġe Ġ= ĠExec utors . new Single Thread Executor Ġ{ Ċĉ ĉ r Ġ-> Ċĉ ĉ val Ġthread Ġ= ĠThread ( r , Ġ" Ac orn UI _ IO ") Ċĉ ĉ thread . set Un caught ExceptionHandler Ġ{ Ċĉĉ ĉ _, Ġexception Ġ-> Ċĉĉ ĉ unc a ught ExceptionHandler ( exception ) Ċĉ ĉ } Ċĉ ĉ thread Ċ ĉ } Ċ ĉ val Ġd Ġ= Ġobject Ġ: ĠDis posable Ġ{ Ċĉ ĉ override Ġfun Ġdispose () Ġ{ Ċĉĉ ĉ e . shutdown Now () Ċĉĉ ĉ Pending Dis pos ables Registry . unregister ( this ) Ċĉ ĉ } Ċ ĉ } Ċ ĉ Pending Dis pos ables Registry . register ( d ) Ċ ĉ e Ċ } Ċ Ċ fun Ġ< T > Ġasync Thread ( time Driver : ĠTime Driver , Ġtimeout : ĠFloat Ġ= Ġ 6 0 f , Ġwork : Ġ() Ġ-> ĠT ): ĠDeferred < T > Ġ{ Ċ Ċ // ĉ return Ġasync ( work ) Ċ ĉ return Ġobject Ġ: ĠPromise < T >(), ĠDeferred < T >, ĠDis posable Ġ{ ĊĊĉ ĉ private Ġvar Ġfuture : ĠFuture < T > ĊĊĉ ĉ init Ġ{ Ċĉĉ ĉ val Ġr Ġ= Ġthis Ċĉĉ ĉ Pending Dis pos ables Registry . register ( this ) Ċĉĉ ĉ future Ġ= Ġexecutor . submit ( Callable < T > Ġ{ Ġwork () Ġ}) ĊĊĉĉ ĉ val Ġwatcher Ġ= Ġobject Ġ: ĠUp datable Child Base () Ġ{ Ċĉĉĉ ĉ private Ġvar Ġtime Remaining Ġ= Ġtimeout ĊĊĉĉĉ ĉ override Ġfun Ġupdate ( tick Time : ĠFloat ) Ġ{ Ċĉĉĉĉ ĉ if Ġ( future . is Done ) Ġ{ Ċĉĉĉĉĉ ĉ remove () Ċĉĉĉĉĉ ĉ val Ġresult Ġ= Ġtry Ġ{ Ċĉĉĉĉĉĉ ĉ future . get () Ċĉĉĉĉĉ ĉ } Ġcatch Ġ( e : ĠThrowable ) Ġ{ Ċĉĉĉĉĉĉ ĉ fail ( e ) Ċĉĉĉĉĉĉ ĉ null Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉĉ ĉ @ Suppress (" UN CHECK ED _ CAST ") Ċĉĉĉĉĉ ĉ if Ġ( status Ġ== ĠDeferred . Status . PENDING ) Ċĉĉĉĉĉĉ ĉ success ( result Ġas ĠT ) Ċĉĉĉĉĉ ĉ Pending Dis pos ables Registry . unregister ( r ) Ċĉĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉĉ ĉ time Remaining Ġ-= Ġtick Time Ċĉĉĉĉĉ ĉ if Ġ( time Remaining Ġ< Ġ 0 f ) Ġ{ Ċĉĉĉĉĉĉ ĉ remove () Ċĉĉĉĉĉĉ ĉ fail ( TimeoutException ( timeout )) Ċĉĉĉĉĉĉ ĉ Pending Dis pos ables Registry . unregister ( r ) Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ċĉĉ ĉ } ĊĊĉĉ ĉ time Driver . addChild ( watcher ) Ċĉ ĉ } ĊĊĉ ĉ override Ġfun Ġdispose () Ġ{ Ċĉĉ ĉ future . cancel ( true ) Ċĉĉ ĉ Pending Dis pos ables Registry . unregister ( this ) Ċĉ ĉ } Ċ ĉ } Ċ }