package Ġcom . genes ys . cloud . messenger . uit est . support . Api Helper Ċ Ċ import Ġandroidx . test . espress o . Id ling Resource Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . genes ys . cloud . messenger . uit est . support . test Config Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ class ĠAPI Ġ: ĠId ling Resource Ġ{ ĊĊĠĠĠ Ġval Ġmapper Ġ= Ġj ack son ObjectMapper () ĊĠĠĠ Ġval Ġtoken Ġ= Ġtest Config . token ĊĠĠĠ Ġval Ġagent Id Ġ= Ġtest Config . agent Id ĊĊĠĠĠ Ġfun Ġpublic Api Call ( http Method : ĠString , Ġhttp URL : ĠString , Ġpayload : ĠByteArray ? Ġ= Ġnull ): ĠJsonNode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" https :// api . in ind ca . com $ http URL ") ĊĠĠĠĠĠĠĠ Ġvar Ġoutput : ĠJsonNode ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset Idle ( false ) ĊĠĠĠĠĠĠĠ Ġprintln (" Sending Ġ$ http Method Ġto Ġ$ http URL .") ĊĊĠĠĠĠĠĠĠ Ġwith ( url . open Connection () Ġas ĠHttp URLConnection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Method Ġ= Ġhttp Method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Authorization ", Ġ" bearer Ġ$ token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" User - Agent ", Ġ" testing - com municate - mobile - Android ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Content - Type ", Ġ" application / json ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsend Ġthe Ġpayload Ġif Ġneeded . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( payload Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( payload ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . buffered Reader (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . lines (). forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ= Ġmapper . readValue ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Idle ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFileNotFoundException Ġcan Ġbe Ġreceived Ġwhen Ġa Ġ 4 0 4 Ġis Ġreturned Ġby Ġan Ġendpoint . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠError (" An Ġerror Ġwas Ġreceived Ġwhile Ġsending Ġan ĠHTTP ĠRequest . ĠThe Ġtarget Ġendpoint Ġwas : Ġ$ error . message Ġ\ n $ response Code Ġ\ n $ response Message ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Idle ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġparse Json To Class ( json Result : ĠJsonNode ?): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson String Ġ= Ġjson Result ?. toString () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( json String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġparse Json To Class ( json Result : ĠList < JsonNode >? ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson String Ġ= Ġjson Result . toString () ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( json String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠId ling ĠResource Ġcode . ĊĠĠĠ Ġprivate Ġval Ġis Idle Ġ= ĠAtomic Boolean ( true ) ĊĊĠĠĠ Ġ// Ġwritten Ġfrom Ġmain Ġthread , Ġread Ġfrom Ġany Ġthread . ĊĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġresource Callback : ĠId ling Resource . Resource Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ= Ġ" HTTP ĠRequest " ĊĊĠĠĠ Ġoverride Ġfun Ġis Idle Now (): ĠBoolean Ġ= Ġis Idle . get () ĊĊĠĠĠ Ġoverride Ġfun Ġregister Idle Transition Callback ( resource Callback : ĠId ling Resource . Resource Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . resource Callback Ġ= Ġresource Callback ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Idle ( is Idle Now : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Idle Now Ġ== Ġis Idle . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Idle . set ( is Idle Now ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Idle Now ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource Callback ?. on Transition To Idle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ