/* Ċ Ġ* Ċ Ġ* Ġ ĠCopyright ( c ) Ġ 2 0 1 9 ĠVer st Si u Ċ Ġ* Ċ Ġ* Ġ Ġ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 . i jo ic . message channel . util Ċ Ċ import Ġcom . i jo ic . message channel . options . Retry Options Ċ import Ġjava . time . Duration Ċ Ċ /** Ċ Ġ* ĠRetry Ġmanager Ċ Ġ* Ċ Ġ* Ġ@ author Ġver st si u Ġcreated Ġat Ġ 2 0 1 9 - 1 0 - 1 1 Ġ 1 1 : 2 9 Ċ Ġ*/ Ċ internal Ġclass ĠRetry Manager ( options : ĠRetry Options ) Ġ{ ĊĊĠ Ġprivate Ġval Ġis Enabled Ġ= Ġoptions . enabled Ġ&& Ġoptions . intervals . isNotEmpty () Ġ&& Ġ( options . retry Always Ġ|| Ġoptions . max Retry Size Ġ> Ġ 0 ) ĊĠ Ġprivate Ġval Ġretry Always Ġ= Ġoptions . retry Always ĊĠ Ġprivate Ġval Ġmax Retry Size Ġ= Ġoptions . max Retry Size ĊĠ Ġprivate Ġval Ġintervals Ġ= Ġoptions . intervals ĊĊĠ Ġprivate Ġvar Ġis Prepare Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġretry Count Ġ= Ġ 0 ĊĠ Ġprivate Ġvar Ġinterval Index Ġ= Ġ 0 ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIgnore Ġmessage Ġsize Ġstatus ĊĠĠ Ġ*/ ĊĠ Ġval Ġignore Message Size Ġ= Ġoptions . ignore Message Size ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġnext Ġretry Ġinterval Ġor Ġnull ĊĠĠ Ġ*/ ĊĠ Ġfun Ġnext Interval (): ĠDuration ? Ġ{ ĊĠĠĠ Ġif Ġ(! isEnabled ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! is Prepare ) Ġ{ ĊĠĠĠĠĠ Ġis Prepare Ġ= Ġtrue ĊĠĠĠĠĠ Ġretry Count Ġ= Ġ 0 ĊĠĠĠĠĠ Ġinterval Index Ġ= Ġ 0 ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ++ retry Count ĊĠĠĠĠĠ Ġ++ interval Index ĊĊĠĠĠĠĠ Ġif Ġ( interval Index Ġ>= Ġintervals . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinterval Index Ġ= Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(! retry Always Ġ&& Ġretry Count Ġ>= Ġmax Retry Size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġintervals [ interval Index ] ĊĠ Ġ} ĊĊĠ Ġfun Ġreset () Ġ{ ĊĠĠĠ Ġis Prepare Ġ= Ġfalse ĊĠ Ġ} Ċ }