/* Ċ Ġ* Ġ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 . server . engine Ċ Ċ import Ġio . ktor . server . application .* Ċ import Ġio . ktor . util . logging .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines .* Ċ Ċ /** Ċ Ġ* ĠFactory Ġinterface Ġfor Ġcreating Ġ[ Application Engine ] Ġinstances Ċ Ġ*/ Ċ public Ġinterface ĠApplication Engine Factory < out ĠT Engine Ġ: ĠApplication Engine , ĊĠĠĠ ĠT Configuration Ġ: ĠApplication Engine . Configuration > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġengine Ġfrom Ġthe Ġgiven Ġ[ environment ] Ġand Ġ[ configure ] Ġscript ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġcreate ( environment : ĠApplication Engine Environment , Ġconfigure : ĠT Configuration . () Ġ-> ĠUnit ): ĠT Engine Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġembedded Ġserver Ġwith Ġthe Ġgiven Ġ[ factory ], Ġlistening Ġon Ġ[ host ]: [ port ] Ċ Ġ* Ġ@ param Ġwatch Paths Ġspecifies Ġpath Ġsub strings Ġthat Ġwill Ġbe Ġw atched Ġfor Ġautomatic Ġre loading Ċ Ġ* Ġ@ param Ġconfigure Ġconfiguration Ġscript Ġfor Ġthe Ġengine Ċ Ġ* Ġ@ param Ġmodule Ġapplication Ġmodule Ġfunction Ċ Ġ*/ Ċ @ Opt In ( Del icate Cor outines Api :: class ) Ċ public Ġfun Ġ< T Engine Ġ: ĠApplication Engine , ĠT Configuration Ġ: ĠApplication Engine . Configuration > Ċ embedded Server ( ĊĠĠĠ Ġfactory : ĠApplication Engine Factory < T Engine , ĠT Configuration >, ĊĠĠĠ Ġport : ĠInt Ġ= Ġ 8 0 , ĊĠĠĠ Ġhost : ĠString Ġ= Ġ" 0 . 0 . 0 . 0 ", ĊĠĠĠ Ġwatch Paths : ĠList < String > Ġ= ĠlistOf ( WORK ING _ DIRECTORY _ PATH ), ĊĠĠĠ Ġconfigure : ĠT Configuration . () Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġmodule : ĠApplication . () Ġ-> ĠUnit Ċ ): ĠT Engine Ġ= ĠGlobal Scope . embedded Server ( factory , Ġport , Ġhost , Ġwatch Paths , ĠEmpty Coroutine Context , Ġconfigure , Ġmodule ) Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġembedded Ġserver Ġwith Ġthe Ġgiven Ġ[ factory ], Ġlistening Ġon Ġ[ host ]: [ port ] Ċ Ġ* Ġ@ param Ġwatch Paths Ġspecifies Ġpath Ġsub strings Ġthat Ġwill Ġbe Ġw atched Ġfor Ġautomatic Ġre loading Ċ Ġ* Ġ@ param Ġconfigure Ġconfiguration Ġscript Ġfor Ġthe Ġengine Ċ Ġ* Ġ@ param Ġparent Coroutine Context Ġspecifies Ġa Ġcoroutine Ġcontext Ġto Ġbe Ġused Ġfor Ġserver Ġjobs Ċ Ġ* Ġ@ param Ġmodule Ġapplication Ġmodule Ġfunction Ċ Ġ*/ Ċ public Ġfun Ġ< T Engine Ġ: ĠApplication Engine , ĠT Configuration Ġ: ĠApplication Engine . Configuration > Ċ Coroutine Scope . embedded Server ( ĊĠĠĠ Ġfactory : ĠApplication Engine Factory < T Engine , ĠT Configuration >, ĊĠĠĠ Ġport : ĠInt Ġ= Ġ 8 0 , ĊĠĠĠ Ġhost : ĠString Ġ= Ġ" 0 . 0 . 0 . 0 ", ĊĠĠĠ Ġwatch Paths : ĠList < String > Ġ= ĠlistOf ( WORK ING _ DIRECTORY _ PATH ), ĊĠĠĠ Ġparent Coroutine Context : ĠCor outine Context Ġ= ĠEmpty Coroutine Context , ĊĠĠĠ Ġconfigure : ĠT Configuration . () Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġmodule : ĠApplication . () Ġ-> ĠUnit Ċ ): ĠT Engine Ġ{ ĊĠĠĠ Ġval Ġconnector s : ĠArray < Engine Connector Config > Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠEngine Connector Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . port Ġ= Ġport ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . host Ġ= Ġhost ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġembedded Server ( ĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġfactory , ĊĠĠĠĠĠĠĠ Ġconnector s Ġ= Ġconnector s , ĊĠĠĠĠĠĠĠ Ġwatch Paths Ġ= Ġwatch Paths , ĊĠĠĠĠĠĠĠ Ġparent Coroutine Context Ġ= Ġparent Coroutine Context , ĊĠĠĠĠĠĠĠ Ġconfigure Ġ= Ġconfigure , ĊĠĠĠĠĠĠĠ Ġmodule Ġ= Ġmodule ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġembedded Ġserver Ġwith Ġthe Ġgiven Ġ[ factory ], Ġlistening Ġon Ġgiven Ġ[ connectors ] Ċ Ġ* Ġ@ param Ġconnector s Ġdefault Ġlistening Ġon Ġ 0 . 0 . 0 . 0 : 8 0 Ċ Ġ* Ġ@ param Ġwatch Paths Ġspecifies Ġpath Ġsub strings Ġthat Ġwill Ġbe Ġw atched Ġfor Ġautomatic Ġre loading Ċ Ġ* Ġ@ param Ġparent Coroutine Context Ġspecifies Ġa Ġcoroutine Ġcontext Ġto Ġbe Ġused Ġfor Ġserver Ġjobs Ċ Ġ* Ġ@ param Ġconfigure Ġconfiguration Ġscript Ġfor Ġthe Ġengine Ċ Ġ* Ġ@ param Ġmodule Ġapplication Ġmodule Ġfunction Ċ Ġ*/ Ċ public Ġfun Ġ< T Engine Ġ: ĠApplication Engine , ĠT Configuration Ġ: ĠApplication Engine . Configuration > Ċ Coroutine Scope . embedded Server ( ĊĠĠĠ Ġfactory : ĠApplication Engine Factory < T Engine , ĠT Configuration >, ĊĠĠĠ Ġvar arg Ġconnector s : ĠEngine Connector Config Ġ= ĠarrayOf ( Engine Connector Builder ()), ĊĠĠĠ Ġwatch Paths : ĠList < String > Ġ= ĠlistOf ( WORK ING _ DIRECTORY _ PATH ), ĊĠĠĠ Ġparent Coroutine Context : ĠCor outine Context Ġ= ĠEmpty Coroutine Context , ĊĠĠĠ Ġconfigure : ĠT Configuration . () Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġmodule : ĠApplication . () Ġ-> ĠUnit Ċ ): ĠT Engine Ġ{ ĊĠĠĠ Ġval Ġenvironment Ġ= Ġapplication Engine Environment Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . parent Coroutine Context Ġ= Ġcoroutine Context Ġ+ Ġparent Coroutine Context ĊĠĠĠĠĠĠĠ Ġthis . log Ġ= ĠK tor Simple Logger (" ktor . application ") ĊĠĠĠĠĠĠĠ Ġthis . watch Paths Ġ= Ġwatch Paths ĊĠĠĠĠĠĠĠ Ġthis . module ( module ) ĊĠĠĠĠĠĠĠ Ġthis . connectors . addAll ( connectors ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġembedded Server ( factory , Ġenvironment , Ġconfigure ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġembedded Ġserver Ġwith Ġthe Ġgiven Ġ[ factory ], Ġ[ environment ] Ġand Ġ[ configure ] Ġscript Ċ Ġ*/ Ċ public Ġfun Ġ< T Engine Ġ: ĠApplication Engine , ĠT Configuration Ġ: ĠApplication Engine . Configuration > Ġembedded Server ( ĊĠĠĠ Ġfactory : ĠApplication Engine Factory < T Engine , ĠT Configuration >, ĊĠĠĠ Ġenvironment : ĠApplication Engine Environment , ĊĠĠĠ Ġconfigure : ĠT Configuration . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠT Engine Ġ{ ĊĠĠĠ Ġreturn Ġfactory . create ( environment , Ġconfigure ) Ċ } Ċ