package Ġjp . bucket eer . sdk Ċ Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġbucket eer . event . client . Event OuterClass Ċ import Ġbucket eer . gateway . Gateway Grpc Ċ import Ġbucket eer . gateway . Service Ċ import Ġbucket eer . user . User OuterClass Ċ import Ġio . grpc . Status RuntimeException Ċ import Ġio . grpc . okhttp . Ok Http Channel Builder Ċ import Ġjp . bucket eer . sdk . log . log d Ċ import Ġjp . bucket eer . sdk . log . lo ge Ċ Ċ internal Ġclass ĠApi Client ( ĊĠĠĠ ĠapiKey : ĠString , ĊĠĠĠ Ġendpoint : ĠString , ĊĠĠĠ Ġprivate Ġval Ġfeature Tag : ĠString Ċ ) Ġ: ĠApi Ġ{ ĊĠ Ġvar Ġfetch Evalu ations Api Callback : ĠFetch Evalu ations Api Callback ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġclient : ĠGateway Grpc . Gateway Blocking Stub ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġchannel Ġ= ĠOk Http Channel Builder . for Address ( endpoint , Ġget Endpoint Port ( endpoint )) ĊĠĠĠĠĠĠĠ Ġ. use Transport Security () ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ// ĠThis Ġworkaround Ġhelps Ġto Ġimprove Ġthe Ġlatency Ġof Ġthe Ġfirst Ġrequest ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġchannel . getState ( true ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnsupportedOperationException ) Ġ{ ĊĠĠĠĠĠ Ġlo ge ( throwable Ġ= Ġe ) Ġ{ Ġ" ApiClient ĠgetState Ġfailed " Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcreds Ġ= ĠCall Cred s ( apiKey ) ĊĠĠĠ Ġclient Ġ= ĠGateway Grpc . new Blocking Stub ( channel ). with Call Credentials ( creds ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Fetch Evaluation Api Callback ( f : ĠFetch Evalu ations Api Callback ) Ġ{ ĊĠĠĠ Ġfetch Evalu ations Api Callback Ġ= Ġf ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġfetch Evaluation ( ĊĠĠĠĠĠ Ġuser : ĠUser OuterClass . User , Ġuser Evalu ations Id : ĠString ) Ġ: ĠApi . Result < Service . Get Evalu ations Response > Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġrequest Ġ= ĠService . Get Evalu ations Request . newBuilder () ĊĠĠĠĠĠĠĠĠĠ Ġ. setUser ( user ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setUser Evalu ations Id ( user Evalu ations Id ) ĊĠĠĠĠĠĠĠĠĠ Ġ. setTag ( feature Tag ) ĊĠĠĠĠĠĠĠĠĠ Ġ. set Source Id ( Event OuterClass . Source Id . ANDROID ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠ Ġlog d Ġ{ Ġ" --> ĠFetch ĠEvaluation \ n $ request " Ġ} ĊĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . get Evalu ations ( request ) ĊĠĠĠĠĠ Ġlog d Ġ{ Ġ" --> ĠEND ĠFetch ĠEvaluation " Ġ} ĊĠĠĠĠĠ Ġlog d Ġ{ Ġ"< -- ĠFetch ĠEvaluation \ n $ response \ n < -- ĠEND ĠEvaluation Ġresponse " Ġ} ĊĠĠĠĠĠ Ġval ĠendTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠ Ġfetch Evalu ations Api Callback ?. on Success ( endTime Ġ- ĠstartTime , Ġresponse . get Serialized Size (), ĊĠĠĠĠĠĠĠĠĠ Ġfeature Tag , Ġresponse . state . name ) ĊĠĠĠĠĠ ĠApi . Result . Success ( response ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠStatus RuntimeException ) Ġ{ ĊĠĠĠĠĠ Ġlog d ( throwable Ġ= Ġe ) Ġ{ Ġ"< -- ĠFetch ĠEvaluation Ġerror " Ġ} ĊĠĠĠĠĠ Ġfetch Evalu ations Api Callback ?. on Failure ( feature Tag , Ġe ) ĊĠĠĠĠĠ ĠApi . Result . Fail ( e . to Bucket eer Exception ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġregister Event ( ĊĠĠĠĠĠ Ġevents : ĠList < Event OuterClass . Event > ĊĠ Ġ): ĠApi . Result < Service . Register Events Response > Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġregister RequestBuilder Ġ= ĠService . Register Events Request . newBuilder () ĊĠĠĠĠĠ Ġval Ġrequest Ġ= Ġregister RequestBuilder ĊĠĠĠĠĠĠĠĠĠ Ġ. addAll Events ( events ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġlog d Ġ{ Ġ" --> ĠRegister Ġevents \ n $ request " Ġ} ĊĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . register Events ( request ) ĊĠĠĠĠĠ Ġlog d Ġ{ Ġ" --> ĠEND ĠRegister Ġevents " Ġ} ĊĠĠĠĠĠ Ġlog d Ġ{ Ġ"< -- ĠRegister Ġevents \ n $ response \ n < -- ĠEND ĠRegister Ġevents " Ġ} ĊĠĠĠĠĠ ĠApi . Result . Success ( response ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠStatus RuntimeException ) Ġ{ ĊĠĠĠĠĠ Ġlog d ( throwable Ġ= Ġe ) Ġ{ Ġ"< -- ĠRegister Ġevents Ġerror " Ġ} ĊĠĠĠĠĠ ĠApi . Result . Fail ( e . to Bucket eer Exception ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġfun Ġget Endpoint Port ( endpoint : ĠString ) Ġ: ĠInt Ġ{ ĊĠĠĠ Ġ// ĠFIXME : ĠThis Ġcondition Ġshould Ġbe Ġremoved Ġonce Ġthe ĠL 7 Ġmigration Ġis Ġdone ĊĠĠĠ Ġif Ġ( endpoint . contains ( ENDPOINT _ L 7 _ PREFIX )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠEND POINT _ L 7 _ PORT ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠEND POINT _ L 4 _ PORT ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠEND POINT _ L 4 _ PORT Ġ= Ġ 9 0 0 0 ĊĠĠĠ Ġconst Ġval ĠEND POINT _ L 7 _ PORT Ġ= Ġ 4 4 3 ĊĠĠĠ Ġconst Ġval ĠEND POINT _ L 7 _ PREFIX Ġ= Ġ" api -" ĊĠ Ġ} Ċ } Ċ