package Ġcom . b ilib ili . b router . core . internal . intercept ors Ċ Ċ import Ġandroid . content . Intent Ċ import Ġcom . b ilib ili . b router . api .* Ċ import Ġcom . b ilib ili . b router . api . internal . inc ub ating . Route Info Internal Ċ import Ġcom . b ilib ili . b router . core . internal . routes . Real Chain Ċ import Ġcom . b ilib ili . b router . core . internal . routes . Stub Routes Impl Ċ Ċ internal Ġclass ĠRetry And Follow Up Interceptor () Ġ: ĊĠĠĠ ĠRoute Interceptor Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfollow Up Count Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠRoute Interceptor . Chain ): ĠRoute Response Ġ{ ĊĠĠĠĠĠĠĠ Ġchain Ġas ĠReal Chain ĊĊĠĠĠĠĠĠĠ Ġfollow Up Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchain . process Request ( chain . request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠReal Chain . process Request ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠRoute Request , ĊĠĠĠĠĠĠĠ Ġprior Response : ĠRoute Response ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠRoute Response Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprior Type Response : ĠRoute Response ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġpending Types Ġ= Ġrequest . route Types . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . empty Route Type Handler ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġpending Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Table Response Ġ= Ġroute Central . find Route ( request , Ġtype ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfailure Response Ġ= Ġif Ġ( query Table Response . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġquery Table Response . route Info Ġas ĠRoute Info Internal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Response Ġ= Ġprocess Single Type ( route , Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Response . is Success Ġ|| Ġ( route Response . flags Ġand ĠRoute Response . FLAG _ SKIP _ REST _ TYPES ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Response . is Success Ġ&& Ġmode Ġ== ĠRequest Mode . INT ENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġroute Response . obj ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( obj Ġ!= Ġnull Ġ&& ĠIntent :: class . java . isAssignableFrom ( obj . java Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ route Response Ġis Ġsuccess , Ġexpect ĠIntent Ġbut Ġis Ġ$ obj , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" please Ġcheck Ġpost - match Ġglobal Ġintercept ors Ġand Ġ${ route . intercept ors . content ToString ()} ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroute Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prior Failure Response ( prior Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prior Route Type Response ( prior Type Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Table Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprior Type Response Ġ= Ġif Ġ( prior Type Response Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Response ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prior Route Type Response ( prior Type Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( prior Type Response ?. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrequest . build Response ( Route Response . Code . NOT _ FOUND )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prior Failure Response ( prior Response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠReal Chain . process Single Type ( ĊĠĠĠĠĠĠĠ Ġ_ route : ĠRoute Info Internal , ĊĠĠĠĠĠĠĠ Ġrequest : ĠRoute Request ĊĠĠĠ Ġ): ĠRoute Response Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġroute Info Ġ= Ġ_ route ĊĠĠĠĠĠĠĠ Ġroute Info . routes . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠStub Routes Impl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġmodule Central . getModule Impl ( it . moduleName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠRoute Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Response . Code . FOUND _ ST UB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Stub Ġmodule : Ġ${ it . moduleName }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconfig . module Missing Reactor . on Module Missing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . moduleName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Info , Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ follow Up Count Ġ> ĠMAX _ FOLLOW _ TIMES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . to Many Follow Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . follow Up Request ( request ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĨį æŁ¥ ä¸Ģæ¬¡ è¡¨ ï¼Į éĺ² æŃ¢ æŁ¥æī¾ è·¯çĶ± æĹ¶ æŃ£ å¥½ åľ¨ å®īè£ħ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Central . find Route ( request , Ġroute Info . route Type ). let Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! r . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRoute Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Response . Code . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" First Ġquery Ġresult Ġis ĠStub Module Ġ${ it . moduleName }, Ġsecond Ġis Ġfailed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Routes Ġ= Ġr . obj Ġas ĠRoute Info Internal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( second Routes . routes Ġis ĠStub Routes Impl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroutes Ġ= Ġsecond Routes . routes Ġas ĠStub Routes Impl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRoute Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Response . Code . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( routes . moduleName Ġ== Ġit . moduleName ) Ġ" Stub Module Ġ'${ routes . moduleName }' Ġinstalled Ġbut Ġno Ġactual Ġroute Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" First Ġquery Ġresult Ġis ĠStub Module Ġ'${ it . moduleName }', Ġsecond Ġis ĠStub Module Ġ'${ routes . moduleName } '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĽ´æĸ° ä¸º æĸ°çļĦ æľīæķĪ è·¯çĶ± ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Info Ġ= Ġsecond Routes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġproceed ( request , Ġroute Ġ= Ġroute Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Success Ġ&& Ġresponse . route Info Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Success Ġbut Ġroute Info Ġis Ġnull : Ġ$ response .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow Up Ġ= Ġwhen Ġ( response . code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Response . Code . RE DIRECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . redirect Ġ?: Ġerror ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Redirect Ġbut Ġno Ġredirect Ġrequest Ġfound : Ġ$ response ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Response . Code . UN AUTHORIZ ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . auth enticator . authenticate ( route Info , Ġresponse )?. follow Up Request ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Up ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġif Ġ(++ follow Up Count Ġ> ĠMAX _ FOLLOW _ TIMES ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . to Many Follow Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Request ( it , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠRoute Response . to Many Follow Up (): ĠRoute Response Ġ{ ĊĠĠĠ Ġreturn ĠnewBuilder () ĊĠĠĠĠĠĠĠ Ġ. code ( Route Response . Code . ERROR ) ĊĠĠĠĠĠĠĠ Ġ. prior Failure Response ( this ) ĊĠĠĠĠĠĠĠ Ġ. message (" Too Ġmany Ġfollow - up Ġrequests : Ġ$ MAX _ FOLLOW _ TIMES ") ĊĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ private Ġconst Ġval ĠMAX _ FOLLOW _ TIMES Ġ= Ġ 2 0 Ċ Ċ private Ġfun ĠRoute Request . follow Up Request ( original Request : ĠRoute Request ): ĠRoute Request Ġ{ ĊĠĠĠ Ġreturn ĠnewBuilder () ĊĠĠĠĠĠĠĠ Ġ. request Code ( original Request . request Code ) ĊĠĠĠĠĠĠĠ Ġ. prev ( null ) ĊĠĠĠĠĠĠĠ Ġ. forward ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Code (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Flag ( Intent . FLAG _ ACTIVITY _ FORWARD _ RESULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. build () Ċ }