/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 1 ĠLe on ĠL inh art Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . gw 2 tb . gw 2 api . client . jdk 1 1 Ċ Ċ import Ġcom . gw 2 tb . gw 2 api . client .* Ċ import Ġcom . gw 2 tb . gw 2 api . client . http .* Ċ import Ġcom . gw 2 tb . gw 2 api . client . internal .* Ċ import Ġkotlinx . coroutines . future .* Ċ import Ġjava . net .* Ċ import Ġjava . net . http .* Ċ import Ġjava . nio . charset .* Ċ Ċ /** Ċ Ġ* Ġ[ HttpClient ] Ġbacked Ġ[ I HttpClient ] Ġimplementation Ġfor Ġ[ GW 2 APIClient ]. Ċ Ġ* Ċ Ġ* Ġ@ since ĠĠĠ 0 . 1 . 0 Ċ Ġ*/ Ċ @ Opt In ( Internal GW 2 APIClient Api :: class ) Ċ public Ġclass ĠJDK HttpClient Impl Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠHttpClient Ġ= ĠHttpClient . new HttpClient (), ĊĠĠĠ Ġprivate Ġval Ġscheme : ĠString Ġ= Ġ" https " Ċ ) Ġ: ĠI HttpClient Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġencode ( query : ĠString ): ĠString Ġ= ĠURL Encoder . encode ( query , ĠStandard Charsets . UTF _ 8 ). replace ("% 2 C ", Ġ", ") ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsend ( request : ĠRequest < *> ): ĠI HttpResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Ġ= ĠhttpClient . send Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpRequest . newBuilder (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri ( URI ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . parameters . isNotEmpty ()) Ġrequest . parameters . entries . join ToString ( separator Ġ= Ġ"& ") Ġ{ Ġ( k , Ġv ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ encode ( k )} =${ encode ( v )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . apiKey Ġ!= Ġnull ) Ġheader (" Authorization ", Ġ" Bearer Ġ${ request . apiKey }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpResponse . Body Handlers . of String () ĊĠĠĠĠĠĠĠ Ġ). as Deferred () ĊĊĠĠĠĠĠĠĠ Ġval ĠhttpResponse Ġ= Ġdeferred . await () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠI HttpResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠhttpResponse . statusCode (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Ġ= ĠhttpResponse . headers (). map (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= ĠhttpResponse . body () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{} Ċ Ċ }