/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠShe T ie Jun Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġme . s het j . base . network . func Ċ Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġio . reactivex . rx java 3 . functions . Function Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeoutException Ċ import Ġme . s het j . base . network . exception . ApiException Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠRetry Exception Func Ġ: ĠFunction < Observable < out ĠThrowable >, ĠObservable <* >> Ġ{ ĊĠĠĠ Ġ/* Ġretry æ¬¡æķ° */ ĊĠĠĠ Ġprivate Ġvar Ġcount Ġ= Ġ 0 ĊĊĠĠĠ Ġ/* å»¶ è¿ Ł */ ĊĠĠĠ Ġprivate Ġvar Ġdelay : ĠLong Ġ= Ġ 5 0 0 ĊĊĠĠĠ Ġ/* åı ł åĬł å»¶ è¿ Ł */ ĊĠĠĠ Ġprivate Ġvar Ġincrease Delay : ĠLong Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġconstructor () ĊĠĠĠ Ġconstructor ( count : ĠInt , Ġdelay : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġthis . delay Ġ= Ġdelay ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( count : ĠInt , Ġdelay : ĠLong , Ġincrease Delay : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . count Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġthis . delay Ġ= Ġdelay ĊĠĠĠĠĠĠĠ Ġthis . increase Delay Ġ= Ġincrease Delay ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġapply ( observable : ĠObservable < out ĠThrowable >): ĠObservable < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobservable . zip With ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . range ( 1 , Ġcount Ġ+ Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrowable , Ġinteger Ġ-> ĠWrapper ( throwable , Ġinteger ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġwrapper Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wrapper . index Ġ> Ġ 1 ) ĠTim ber . i (" éĩį è¯ķ æ¬¡æķ° ï¼ļ % s ", Ġwrapper . index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerr Code Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wrapper . throwable Ġis ĠApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception : ĠApiException Ġ= Ġwrapper . throwable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Code Ġ= Ġexception . code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . throwable Ġis ĠConnect Exception Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . throwable Ġis ĠSocket TimeoutException Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Code Ġ== ĠApiException . ERROR . NET WORD _ ERROR Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Code Ġ== ĠApiException . ERROR . TIMEOUT _ ERROR Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . throwable Ġis ĠSocket TimeoutException Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . throwable Ġis ĠTimeout Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper . index Ġ< Ġcount Ġ+ Ġ 1 Ġ// Ġå¦Ĥæŀľ è¶ħ åĩº éĩį è¯ķ æ¬¡æķ° ä¹Ł æĬĽ åĩº éĶĻè¯¯ ï¼Į åĲ¦åĪĻ é»ĺè®¤ æĺ¯ ä¼ļ è¿Ľåħ¥ on Completed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . timer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Ġ+ Ġ( wrapper . index Ġ- Ġ 1 ) Ġ* Ġincrease Delay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠObservable . error < Any >( wrapper . throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠWrapper ( val Ġthrowable : ĠThrowable , Ġval Ġindex : ĠInt ) Ċ } Ċ