From 40d9e9ffdd75ec984807f4f08cc3d3af32611241 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 28 Apr 2016 05:22:40 -0800 Subject: [PATCH] Servers. --- .../beust/kobalt/app/remote/JerseyServer.kt | 148 +++++++++--------- .../beust/kobalt/app/remote/KobaltServer.kt | 6 +- .../beust/kobalt/app/remote/SparkServer.kt | 49 ++++++ 3 files changed, 127 insertions(+), 76 deletions(-) create mode 100644 src/main/kotlin/com/beust/kobalt/app/remote/SparkServer.kt diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/JerseyServer.kt b/src/main/kotlin/com/beust/kobalt/app/remote/JerseyServer.kt index 93aa6916..a94555f2 100644 --- a/src/main/kotlin/com/beust/kobalt/app/remote/JerseyServer.kt +++ b/src/main/kotlin/com/beust/kobalt/app/remote/JerseyServer.kt @@ -1,74 +1,74 @@ -package com.beust.kobalt.app.remote - -import com.beust.kobalt.Args -import com.beust.kobalt.api.Kobalt -import com.beust.kobalt.api.Project -import com.google.gson.Gson -import org.glassfish.jersey.jetty.JettyHttpContainerFactory -import org.glassfish.jersey.server.ResourceConfig -import org.glassfish.jersey.server.ServerProperties -import javax.ws.rs.GET -import javax.ws.rs.Path -import javax.ws.rs.Produces -import javax.ws.rs.QueryParam -import javax.ws.rs.core.MediaType -import javax.ws.rs.core.UriBuilder - -class JerseyServer(val initCallback: (String) -> List, val cleanUpCallback: () -> Unit) - : KobaltServer .IServer { - - companion object { - lateinit var initCallback: (String) -> List - lateinit var cleanUpCallback: () -> Unit - } - - init { - JerseyServer.initCallback = initCallback - JerseyServer.cleanUpCallback = cleanUpCallback - } - - override fun run(port: Int) { - val baseUri = UriBuilder.fromUri("http://localhost/").port(port).build() - val config = ResourceConfig(KobaltResource::class.java) - with (JettyHttpContainerFactory.createServer(baseUri, config)) { - try { - start() - join() - } finally { - destroy() - } - } - - } -} - -@Path("/v0") -class KobaltResource : ResourceConfig() { - init { - property(ServerProperties.TRACING, "ALL") - } - - @GET - @Path("ping") - @Produces(MediaType.TEXT_PLAIN) - fun getDependencies() = "pong" - - @GET - @Path("getDependencies") - @Produces(MediaType.APPLICATION_JSON) - fun getDependencies(@QueryParam("buildFile") buildFile: String) : String { - try { - val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java) - val args = Kobalt.INJECTOR.getInstance(Args::class.java) - - val projects = JerseyServer.initCallback(buildFile) - val dd = dependencyData.dependenciesDataFor(buildFile, args) - val result = Gson().toJson(dd) - return result - } catch(ex: Exception) { - return "Error: " + ex.message - } finally { - JerseyServer.cleanUpCallback() - } - } -} +//package com.beust.kobalt.app.remote +// +//import com.beust.kobalt.Args +//import com.beust.kobalt.api.Kobalt +//import com.beust.kobalt.api.Project +//import com.google.gson.Gson +//import org.glassfish.jersey.jetty.JettyHttpContainerFactory +//import org.glassfish.jersey.server.ResourceConfig +//import org.glassfish.jersey.server.ServerProperties +//import javax.ws.rs.GET +//import javax.ws.rs.Path +//import javax.ws.rs.Produces +//import javax.ws.rs.QueryParam +//import javax.ws.rs.core.MediaType +//import javax.ws.rs.core.UriBuilder +// +//class JerseyServer(val initCallback: (String) -> List, val cleanUpCallback: () -> Unit) +// : KobaltServer .IServer { +// +// companion object { +// lateinit var initCallback: (String) -> List +// lateinit var cleanUpCallback: () -> Unit +// } +// +// init { +// JerseyServer.initCallback = initCallback +// JerseyServer.cleanUpCallback = cleanUpCallback +// } +// +// override fun run(port: Int) { +// val baseUri = UriBuilder.fromUri("http://localhost/").port(port).build() +// val config = ResourceConfig(KobaltResource::class.java) +// with (JettyHttpContainerFactory.createServer(baseUri, config)) { +// try { +// start() +// join() +// } finally { +// destroy() +// } +// } +// +// } +//} +// +//@Path("/v0") +//class KobaltResource : ResourceConfig() { +// init { +// property(ServerProperties.TRACING, "ALL") +// } +// +// @GET +// @Path("ping") +// @Produces(MediaType.TEXT_PLAIN) +// fun getDependencies() = "pong" +// +// @GET +// @Path("getDependencies") +// @Produces(MediaType.APPLICATION_JSON) +// fun getDependencies(@QueryParam("buildFile") buildFile: String) : String { +// try { +// val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java) +// val args = Kobalt.INJECTOR.getInstance(Args::class.java) +// +// val projects = JerseyServer.initCallback(buildFile) +// val dd = dependencyData.dependenciesDataFor(buildFile, args) +// val result = Gson().toJson(dd) +// return result +// } catch(ex: Exception) { +// return "Error: " + ex.message +// } finally { +// JerseyServer.cleanUpCallback() +// } +// } +//} diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt b/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt index b02c0466..f6b477ef 100644 --- a/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt +++ b/src/main/kotlin/com/beust/kobalt/app/remote/KobaltServer.kt @@ -30,14 +30,16 @@ class KobaltServer(val force: Boolean, val givenPort: Int? = null, val port = givenPort ?: ProcessUtil.findAvailablePort(1234) try { if (createServerFile(port, force)) { + log(1, "KobaltServer listening on port $port") // OldServer(initCallback, cleanUpCallback).run(port) - JerseyServer(initCallback, cleanUpCallback).run(port) +// JerseyServer(initCallback, cleanUpCallback).run(port) + SparkServer(initCallback, cleanUpCallback).run(port) // WasabiServer(initCallback, cleanUpCallback).run(port) } } catch(ex: Exception) { ex.printStackTrace() } finally { - deleteServerFile() +// deleteServerFile() } return port } diff --git a/src/main/kotlin/com/beust/kobalt/app/remote/SparkServer.kt b/src/main/kotlin/com/beust/kobalt/app/remote/SparkServer.kt new file mode 100644 index 00000000..1508564f --- /dev/null +++ b/src/main/kotlin/com/beust/kobalt/app/remote/SparkServer.kt @@ -0,0 +1,49 @@ +package com.beust.kobalt.app.remote + +import com.beust.kobalt.Args +import com.beust.kobalt.api.Kobalt +import com.beust.kobalt.api.Project +import com.google.gson.Gson +import spark.Route +import spark.Spark + +class SparkServer(val initCallback: (String) -> List, val cleanUpCallback: () -> Unit) + : KobaltServer .IServer { + + companion object { + lateinit var initCallback: (String) -> List + lateinit var cleanUpCallback: () -> Unit + } + + init { + SparkServer.initCallback = initCallback + SparkServer.cleanUpCallback = cleanUpCallback + } + + override fun run(port: Int) { + Spark.port(port) + Spark.get("/hello", Route { req, res -> "Hello world" }) + Spark.get("/v0/getDependencies", { request, response -> + val buildFile = request.queryParams("buildFile") + if (buildFile != null) { + val projects = initCallback(buildFile) + val result = try { + val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java) + val args = Kobalt.INJECTOR.getInstance(Args::class.java) + + val dd = dependencyData.dependenciesDataFor(buildFile, args) + Gson().toJson(dd) + } catch(ex: Exception) { + "Error: " + ex.message + } finally { + cleanUpCallback() + } + + result + } else { + "error" + } + }) + } +} +