/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠF rol lo Ċ Ġ* Ċ Ġ* Ġ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 Ġus . f rol lo . f rol lo sdk . network Ċ Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġus . f rol lo . f rol lo sdk . core . F rol lo SDK Configuration Ċ import Ġus . f rol lo . f rol lo sdk . logging . Log Ċ import Ġjava . io . IOException Ċ Ċ internal Ġclass ĠToken Interceptor ( private Ġval Ġhelper : ĠNetwork Helper , Ġprivate Ġval Ġconfig : ĠF rol lo SDK Configuration ) Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Token Interceptor " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ RATE _ LIMIT _ COUNT Ġ= Ġ 1 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġrate Limit Count Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġadapt Request ( chain . request ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġchain . proceed ( request ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful Ġ&& Ġresponse . code Ġ== Ġ 4 2 9 Ġ&& Ġrate Limit Count Ġ< ĠMAX _ RATE _ LIMIT _ COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ("$ TAG # intercept ", Ġ" Error ĠResponse Ġ 4 2 9 : ĠToo Ġmany Ġrequests . ĠBack off !") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwait Ġ& Ġretry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate Limit Count Ġ= ĠMath . min ( rate Limit Count Ġ+ Ġ 1 , ĠMAX _ RATE _ LIMIT _ COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsleep Time Ġ= Ġ( rate Limit Count Ġ* Ġ 3 ) Ġ* Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( sleep Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġchain . proceed ( chain . request ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadapt Request ( original Request : ĠRequest ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġoriginal Request . newBuilder () ĊĠĠĠĠĠĠĠ Ġhelper . add Additional Headers ( builder , ĠsessionId Ġ= Ġconfig . sessionId Provider ?. sessionId ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} Ċ } Ċ