/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠJames ĠB acon Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġuk . co . b acon i . playground . kotlin . akka Ċ Ċ import Ġakka . actor . Actor System Ċ import Ġakka . stream . Actor Material izer Ċ import Ġakka . http . jav ad sl . Http Ċ import Ġakka . http . jav ad sl . Connect Http Ċ import Ġakka . http . jav ad sl . Server Binding Ċ import Ġakka . http . jav ad sl . server . Route Ċ import Ġakka . pattern . Circuit Breaker Ċ import Ġuk . co . b acon i . playground . kotlin . akka . Json Support . with Json Rejection Handling Ċ import Ġuk . co . b acon i . playground . kotlin . akka . hw . HelloWorld Route Ċ import Ġuk . co . b acon i . playground . kotlin . akka . hw . HelloWorld Provider Ċ import Ġjava . time . Duration Ċ Ċ import Ġjava . util . concurrent . Completion Stage Ċ Ċ class ĠApplication Ġ: ĠHello World Route Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start HelloWorld Server (" 1 2 7 . 0 . 0 . 1 ", Ġ 8 0 8 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġactor System : ĠActor System Ġ= ĠActor System . create (" hello - world - application ") ĊĊĠĠĠ Ġoverride Ġval Ġhello World Provider Ġ= ĠHello World Provider () ĊĠĠĠ Ġoverride Ġval Ġhello World Circuit Breaker Ġ= Ġcreate Circuit Breaker () ĊĊĠĠĠ Ġfun Ġstart HelloWorld Server ( host : ĠString , Ġport : ĠInt ): ĠApplication Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Json HttpServer ( host , Ġport ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhello World Route () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Json HttpServer ( host : ĠString , Ġport : ĠInt , Ġroutes : Ġ() Ġ-> ĠRoute ): ĠCompletion Stage < Server Binding > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġactor Material izer Ġ= ĠActor Material izer . create ( actor System ) ĊĊĠĠĠĠĠĠĠ Ġval Ġroute Flow Ġ= Ġroutes (). flow ( actor System , Ġactor Material izer ) ĊĠĠĠĠĠĠĠ Ġval Ġhttp Ġ= ĠHttp . get ( actor System ) ĊĊĠĠĠĠĠĠĠ Ġactor System . log (). info (" Starting Ġserver Ġat Ġhttp :// $ host :$ port /") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhttp . bind And Handle ( route Flow , ĠConnect Http . to Host ( host , Ġport ), Ġactor Material izer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Circuit Breaker (): ĠCircuit Breaker Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Failures Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġcall Timeout Ġ= ĠDuration . of Millis ( 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġreset Timeout Ġ= ĠDuration . of Minutes ( 5 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCircuit Breaker . create ( actor System . scheduler , Ġmax Failures , Ġcall Timeout , Ġreset Timeout ) ĊĠĠĠ Ġ} Ċ } Ċ