package Ġparallel 2 0 1 9 . delay proxy _ 4 Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . future . await Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġparallel 2 0 1 9 . Request . Delay Ċ import Ġparallel 2 0 1 9 . Request . Error Ċ import Ġparallel 2 0 1 9 . Utils Ċ import Ġparallel 2 0 1 9 . Utils . client Ċ import Ġparallel 2 0 1 9 . Utils . with Socket Suspend Ċ import Ġjava . net . Server Socket Ċ import Ġjava . net . Socket Ċ import Ġjava . net . http . HttpResponse Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ suspend Ġfun Ġrun ( socket : ĠSocket ) Ġ{ ĊĠĠĠ Ġwith Socket Suspend ( socket ) Ġ{ Ġreader , Ġwriter Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠUtils . parse Request ( reader ) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġwhen Ġ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDelay Ġ-> Ġdelay AndGet ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠError Ġ-> ĠCompletableFuture . supply Async Ġ{ ĠUtils . RC _ 5 0 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . println ( msg . await ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdelay AndGet ( request : ĠDelay ): ĠCompletableFuture < String > Ġ{ ĊĠĠĠ Ġreturn ĠCompletableFuture . run Async Ġ{ ĊĠĠĠĠĠĠĠ ĠThread . sleep ( request . delay ) ĊĠĠĠ Ġ}. then Compose Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . send Async ( Utils . httpRequest ( request . uri ), Ġbody Handler ) ĊĠĠĠ Ġ}. then Apply Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠ ĠUtils . create HttpResponse ( response ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġbody Handler Ġ= ĠHttpResponse . Body Handlers . of String () !! Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠServer Socket ( Utils . PORT ). use Ġ{ Ġserver Socket Ġ-> ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsocket Ġ= Ġserver Socket . accept () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun ( socket ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ