/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 2 0 Ġoriginal Ġauthors Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttps :// 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 Ġio . mic ronaut . ktor . server Ċ Ċ import Ġio . ktor . server . engine . Application Engine Ċ import Ġio . ktor . server . engine . Application Engine Environment Ċ import Ġio . mic ronaut . context . ApplicationContext Ċ import Ġio . mic ronaut . http . server . HttpServer Configuration Ċ import Ġio . mic ronaut . runtime . ApplicationConfiguration Ċ import Ġio . mic ronaut . runtime . server . Embedded Server Ċ import Ġio . mic ronaut . runtime . server . event . Server Shutdown Event Ċ import Ġio . mic ronaut . runtime . server . event . Server Startup Event Ċ import Ġjava . net . URI Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġthe ĠEmbedded Server Ġinterface Ġfor ĠK tor . Ċ Ġ* Ċ Ġ* Ġ@ author Ġg ra em ero cher Ċ Ġ* Ġ@ since Ġ 1 . 0 Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract K tor Embedded Server ( ĊĠĠĠĠĠĠĠ Ġopen Ġval Ġctx : ĠApplication Context , ĊĠĠĠĠĠĠĠ Ġopen Ġval Ġserver Configuration : ĠHttp Server Configuration , ĊĠĠĠĠĠĠĠ Ġopen Ġval Ġengine Environment : ĠApplication Engine Environment , ĊĠĠĠĠĠĠĠ Ġopen Ġval Ġapplication Engine : ĠApplication Engine ) Ġ: ĠEmbedded Server Ġ{ ĊĊĠĠĠ Ġvar Ġrunning Ġ: ĠAtomic Boolean Ġ= ĠAtomic Boolean ( false ) ĊĊĠĠĠ Ġoverride Ġfun Ġget ApplicationContext (): ĠApplication Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġctx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Running (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrunning . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget URL (): ĠURL Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuri . to URL () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Host (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnector s Ġ= Ġengine Environment . connectors ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġconnector s . first () ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst . host ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget URI (): ĠURI Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠURI . create ("$ scheme :// $ host :$ port ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ApplicationConfiguration (): ĠApplication Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġserver Configuration . application Configuration ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Port (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnector s Ġ= Ġengine Environment . connectors ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġconnector s . first () ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst . port ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Scheme (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnector s Ġ= Ġengine Environment . connectors ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġconnector s . first () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfirst . type . name . lowercase ( Locale . EN GL ISH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart (): ĠEmbedded Server Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( running . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Engine . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . publish Event ( Server Startup Event ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop (): ĠEmbedded Server Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( running . compare AndSet ( true , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Engine . stop ( 1 0 0 0 , Ġ 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . publish Event ( Server Shutdown Event ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis KeepAlive (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ