package Ġcom . source clear . agile . pi planning Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . datatype . jdk 8 . J dk 8 Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . source clear . agile . pi planning . objects . Problem Ċ import Ġcom . source clear . agile . pi planning . objects . Sol n Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . net . URI Ċ import Ġjava . net . http . HttpClient Ċ import Ġjava . net . http . HttpRequest Ċ import Ġjava . net . http . HttpResponse ĊĊ Ċ class ĠClient Ġ{ ĊĠ Ġprivate Ġval ĠhttpClient Ġ= ĠHttpClient . newBuilder (). build () ĊĠ Ġval ĠobjectMapper Ġ= ĠObjectMapper (). register Module ( Kotlin Module ()). register Module ( J dk 8 Module ()) !! ĊĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Client :: class . java ) ĊĊĠ Ġ// //////////////////////// /// ĠClass ĠAttributes Ġ\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \ ĊĊĠ Ġfun Ġsolve ( uri : ĠURI , Ġproblem : ĠProblem ): ĠSet < Sol n > Ġ{ ĊĊĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest . newBuilder () ĊĠĠĠĠĠĠĠ Ġ. uri ( uri . resolve ("/ solve ")) ĊĠĠĠĠĠĠĠ Ġ. POST ( HttpRequest . Body Publish ers . of String ( object Mapper . writeValue AsString ( problem ))) ĊĠĠĠĠĠĠĠ Ġ. setHeader (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġval Ġr Ġ= ĠhttpClient . send ( request , ĠHttpResponse . Body Handlers . of String ()); ĊĠĠĠ Ġreturn ĠobjectMapper . readValue ( r . body ()) ĊĠ Ġ} ĊĊĠ Ġfun Ġsolve Preview ( uri : ĠURI , Ġproblem : ĠProblem , Ġanswers : Ġ( Set < Sol n >) Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġrequest Ġ= ĠHttpRequest . newBuilder () ĊĠĠĠĠĠĠĠ Ġ. uri ( uri . resolve ("/ solve / stream ")) ĊĠĠĠĠĠĠĠ Ġ. POST ( HttpRequest . Body Publish ers . of String ( object Mapper . writeValue AsString ( problem ))) ĊĠĠĠĠĠĠĠ Ġ. setHeader (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġval Ġr Ġ= ĠhttpClient . send ( request , ĠHttpResponse . Body Handlers . of InputStream ()); ĊĠĠĠ ĠBufferedReader ( InputStream Reader ( r . body ())). use Ġ{ Ġi Ġ-> ĊĠĠĠĠĠ ĠobjectMapper . factory . create Parser ( i ). use Ġ{ Ġparser Ġ-> ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠobjectMapper . readValue < Set < Sol n >>( parser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! answers ( v )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . trace (" client Ġaborted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlogger . trace (" solver Ġstopped ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ