41 lines
1.3 KiB
Kotlin
41 lines
1.3 KiB
Kotlin
package be.simplenotes.app.jetty
|
|
|
|
import org.eclipse.jetty.server.Server
|
|
import org.eclipse.jetty.server.ServerConnector
|
|
import org.eclipse.jetty.servlet.ServletContextHandler
|
|
import org.eclipse.jetty.servlet.ServletContextHandler.SESSIONS
|
|
import org.eclipse.jetty.servlet.ServletHolder
|
|
import org.http4k.core.HttpHandler
|
|
import org.http4k.server.Http4kServer
|
|
import org.http4k.server.ServerConfig
|
|
import org.http4k.servlet.asServlet
|
|
|
|
class Jetty(private val port: Int, private val server: Server) : ServerConfig {
|
|
constructor(port: Int, vararg inConnectors: ConnectorBuilder) : this(
|
|
port,
|
|
Server().apply {
|
|
inConnectors.forEach { addConnector(it(this)) }
|
|
}
|
|
)
|
|
|
|
override fun toServer(http: HttpHandler): Http4kServer {
|
|
server.insertHandler(http.toJettyHandler())
|
|
|
|
return object : Http4kServer {
|
|
override fun start(): Http4kServer = apply {
|
|
server.start()
|
|
}
|
|
|
|
override fun stop(): Http4kServer = apply { server.stop() }
|
|
|
|
override fun port(): Int = if (port > 0) port else server.uri.port
|
|
}
|
|
}
|
|
}
|
|
|
|
fun HttpHandler.toJettyHandler() = ServletContextHandler(SESSIONS).apply {
|
|
addServlet(ServletHolder(this@toJettyHandler.asServlet()), "/*")
|
|
}
|
|
|
|
typealias ConnectorBuilder = (Server) -> ServerConnector
|