/* Ċ Ġ* Ġ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 . engine Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util . concurrent .* Ċ import Ġkotlin . coroutines .* Ċ Ċ /** Ċ Ġ* ĠBase Ġj vm Ġimplementation Ġfor Ġ[ HttpClient Engine ] Ċ Ġ*/ Ċ @ Suppress (" K Doc Missing Documentation ") Ċ abstract Ġclass ĠHttpClient Jvm Engine ( engine Name : ĠString ) Ġ: ĠHttpClient Engine Ġ{ ĊĠĠĠ Ġprivate Ġval Ġclient Context Ġ= ĠSuper visor Job () ĊĠĠĠ Ġprivate Ġval Ġ_ dispatcher Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠExec utors . new Fixed ThreadPool ( config . threads Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( it ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Daemon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. as Coroutine Dispatcher () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Use Experimental ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġval Ġdispatcher : ĠCor outine Dispatcher ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ dispatcher ĊĊĠĠĠ Ġ@ Use Experimental ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ dispatcher Ġ+ Ġclient Context Ġ+ ĠCor outine Name ("$ engine Name - context ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġ[ Coroutine Context ] Ġto Ġexecute Ġcall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Use Experimental ( Internal Cor outines Api :: class ) ĊĠĠĠ Ġprotected Ġsuspend Ġfun Ġcreate Call Context (): ĠCor outine Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall Job Ġ= ĠJob ( client Context ) ĊĠĠĠĠĠĠĠ Ġval Ġcall Context Ġ= Ġcoroutine Context Ġ+ Ġcall Job ĊĊĠĠĠĠĠĠĠ Ġval Ġparent Coroutine Job Ġ= Ġcurrent Context ()[ Job ] ĊĠĠĠĠĠĠĠ Ġval Ġon Parent Cancel Cleanup Handle Ġ= Ġparent Coroutine Job ?. invoke On Completion ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon C ancell ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcause Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cause Ġ!= Ġnull ) Ġcall Context . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcall Job . invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Parent Cancel Cleanup Handle ?. dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcall Context ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Context . complete () ĊĊĠĠĠĠĠĠĠ Ġclient Context . invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ dispatcher . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġsuspend Ġinline Ġfun Ġcurrent Context () Ġ= Ġcoroutine Context Ċ