60 lines
1.5 KiB
Kotlin
60 lines
1.5 KiB
Kotlin
package be.vandewalleh
|
|
|
|
import be.vandewalleh.extensions.ApplicationBuilder
|
|
import be.vandewalleh.extensions.RoutingBuilder
|
|
import io.ktor.application.Application
|
|
import io.ktor.application.log
|
|
import io.ktor.routing.routing
|
|
import io.ktor.server.engine.*
|
|
import io.ktor.server.netty.Netty
|
|
import org.kodein.di.DI
|
|
import org.kodein.di.description
|
|
import org.kodein.di.instance
|
|
import org.slf4j.Logger
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
fun main() {
|
|
val di = DI { import(mainModule) }
|
|
val config by di.instance<Config>()
|
|
val logger by di.instance<Logger>()
|
|
logger.info("Running application with configuration $config")
|
|
logger.debug("Kodein bindings\n${di.container.tree.bindings.description()}")
|
|
serve(di)
|
|
}
|
|
|
|
fun serve(di: DI) {
|
|
val config by di.instance<Config>()
|
|
val logger by di.instance<Logger>()
|
|
val env = applicationEngineEnvironment {
|
|
module {
|
|
module(di)
|
|
}
|
|
log = logger
|
|
connector {
|
|
host = config.server.host
|
|
port = config.server.port
|
|
}
|
|
}
|
|
with(embeddedServer(Netty, env)) {
|
|
addShutdownHook { stop(1, 5, TimeUnit.SECONDS) }
|
|
start(wait = true)
|
|
}
|
|
}
|
|
|
|
fun Application.module(di: DI) {
|
|
val builders: Set<ApplicationBuilder> by di.instance()
|
|
|
|
builders.forEach {
|
|
it.builder(this)
|
|
}
|
|
|
|
routing {
|
|
trace { application.log.trace(it.buildText()) }
|
|
}
|
|
|
|
val routingBuilders: Set<RoutingBuilder> by di.instance()
|
|
routingBuilders.forEach {
|
|
routing(it.builder)
|
|
}
|
|
}
|