/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 1 9 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġio . ktor . client Ċ Ċ import Ġio . ktor . client . engine .* Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠConstructs Ġan Ġasynchronous Ġ[ HttpClient ] Ġusing Ġoptional Ġ[ block ] Ġfor Ġconfiguring Ġthis Ġclient . Ċ Ġ* Ċ Ġ* ĠThe Ġ[ HttpClient Engine ] Ġis Ġselected Ġfrom Ġthe Ġdependencies Ġusing Ġ[ Service Loader ]. Ċ Ġ* ĠThe Ġfirst Ġfound Ġimplementation Ġthat Ġprovides Ġ[ HttpClient Engine Container ] Ġservice Ġimplementation Ġis Ġused . Ċ Ġ* ĠAn Ġexception Ġis Ġthrown Ġif Ġno Ġimplementations Ġfound . Ċ Ġ* Ċ Ġ* ĠSee Ġhttps :// ktor . io / docs / http - client - engines . html Ċ Ġ*/ Ċ public Ġactual Ġfun ĠHttpClient ( ĊĠĠĠ Ġblock : ĠHttpClient Config <* >. () Ġ-> ĠUnit Ċ ): ĠHttpClient Ġ= ĠHttpClient ( FACTORY , Ġblock ) Ċ Ċ /** Ċ Ġ* ĠA Ġcontainer Ġis Ġsearched Ġacross Ġdependencies Ġusing Ġ[ Service Loader ] Ġto Ġfind Ġclient Ġimplementations . Ċ Ġ* ĠAn Ġimplementation Ġof Ġthis Ġinterface Ġprovides ĠHTTP Ġclient Ġ[ factory ] Ġand Ġonly Ġused Ċ Ġ* Ġto Ġfind Ġthe Ġdefault Ġclient Ġengine Ċ Ġ* Ġwhen Ġ[ HttpClient ] Ġfunction Ġis Ġcalled Ġwith Ġno Ġparticular Ġclient Ġimplementation Ġspecified Ċ Ġ* Ċ Ġ* Ġ@ property Ġfactory Ġthat Ġproduces ĠHTTP Ġclient Ġinstances Ċ Ġ*/ Ċ public Ġinterface ĠHttpClient Engine Container Ġ{ ĊĠĠĠ Ġpublic Ġval Ġfactory : ĠHttpClient Engine Factory < *> Ċ } Ċ Ċ /** Ċ Ġ* ĠWork around Ġfor Ġdummy Ġandroid Ġ[ ClassLoader ]. Ċ Ġ*/ Ċ private Ġval Ġengines : ĠList < HttpClient Engine Container > Ġ= ĠHttpClient Engine Container :: class . java . let Ġ{ ĊĠĠĠ ĠService Loader . load ( it , Ġit . class Loader ). toList () Ċ } Ċ Ċ private Ġval ĠF ACT ORY Ġ= Ġengines . first OrNull ()?. factory Ġ?: Ġerror ( ĊĠĠĠ Ġ" Failed Ġto Ġfind ĠHTTP Ġclient Ġengine Ġimplementation Ġin Ġthe Ġclasspath : Ġconsider Ġadding Ġclient Ġengine Ġdependency . Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ" See Ġhttps :// ktor . io / docs / http - client - engines . html " Ċ ) Ċ