package Ġcom . ws . lib . rest ful Ċ Ċ import Ġcom . ws . lib . cache . Hi Storage Ċ import Ġcom . ws . lib . executor . Hi Executor Ċ import Ġcom . ws . lib . log . Hi Log Ċ import Ġcom . ws . lib . rest ful . annotation . Cache Strategy Ċ import Ġcom . ws . lib . util . Main Handler Ċ Ċ /** Ċ Ġ* Ġ ä»£çĲĨ Call Factory åĪĽå»º åĩº æĿ¥çļĦ call å¯¹è±¡ ï¼Į ä»İ èĢĮ å®ŀçİ° æĭ ¦ æĪª åĻ¨ çļĦ æ´¾ åıĳ åĬ¨ ä½ľ Ċ Ġ*/ Ċ class ĠScheduler ( ĊĠĠĠ Ġprivate Ġval Ġcall Factory : ĠHi Call . Factory , ĊĠĠĠ Ġprivate Ġval Ġintercept ors : ĠMutable List < Hi Interceptor > Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġnew Call ( request : ĠHi Request ): ĠHi Call < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Call : ĠHi Call < *> Ġ= Ġcall Factory . new Call ( request ) ĊĠĠĠĠĠĠĠ Ġreturn ĠProxy Call ( new Call , Ġrequest ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠProxy Call < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdelegate : ĠHi Call < T >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrequest : ĠHi Request ĊĠĠĠ Ġ) Ġ: ĠHi Call < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute (): ĠHi Response < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Interceptor ( request , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . cache Strategy Ġ== ĠCache Strategy . CACHE _ FIRST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Response Ġ= Ġread Cache < T >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cache Response . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdelegate . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Cache If Need ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Interceptor ( request , Ġresponse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġenqueue ( callback : ĠHi Callback < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Interceptor ( request , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . cache Strategy Ġ== ĠCache Strategy . CACHE _ FIRST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHi Executor . execute ( run nable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Response Ġ= Ġread Cache < T >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cache Response . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĬĽ åĪ° ä¸» çº¿ç¨ĭ éĩĮéĿ¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Handler . send At Front Of Queue ( run nable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Success ( cache Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHi Log . d (" enqueue Ġ, cache Ġ: Ġ" Ġ+ Ġrequest . get CacheKey ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate . enqueue ( object Ġ: ĠHi Callback < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠHi Response < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Interceptor ( request , Ġresponse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Cache If Need ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Success ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHi Log . d (" enqueue Ġ, remote Ġ: Ġ" Ġ+ Ġrequest . get CacheKey ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Failed ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsave Cache If Need ( response : ĠHi Response < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . cache Strategy Ġ== ĠCache Strategy . CACHE _ FIRST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġrequest . cache Strategy Ġ== ĠCache Strategy . NET _ CACHE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHi Executor . execute ( run nable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHi Storage . save Cache ( request . get CacheKey (), Ġresponse . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T > Ġread Cache (): ĠHi Response < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// hist orage ĠæŁ¥è¯¢ ç¼ĵåŃĺ ĠéľĢè¦ģ æıĲä¾Ľ ä¸Ģä¸ª cache Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// request Ġde Ġurl + åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Key Ġ= Ġrequest . get CacheKey () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Ġ= ĠHi Storage . getCache < T >( cacheKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Response Ġ= ĠHi Response < T >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Response . data Ġ= Ġcache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Response . code Ġ= ĠHi Response . CACHE _ SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Response . msg Ġ= Ġ" ç¼ĵåŃĺ èİ·åıĸ æĪĲåĬŁ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache Response ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdispatch Interceptor ( request : ĠHi Request , Ġresponse : ĠHi Response < T > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intercept ors . size Ġ<= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInter ceptor Chain ( request , Ġresponse ). dispatch () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġinternal Ġinner Ġclass ĠInter ceptor Chain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġrequest : ĠHi Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġresponse : ĠHi Response < T >? ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠHi Interceptor . Chain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»£è¡¨ çļĦæĺ¯ ĠåĪĨ åıĳ çļĦ ç¬¬ åĩłä¸ª æĭ ¦ æĪª åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcall Index : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġis Request Period : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġresponse Ġ== Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrequest (): ĠHi Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresponse (): ĠHi Response < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdispatch () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterceptor Ġ= Ġintercept ors [ call Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintercept Ġ= Ġinterceptor . intercept ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! intercept Ġ&& Ġcall Index Ġ< Ġintercept ors . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ