Main.scala 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package example
  2. import com.github.plokhotnyuk.jsoniter_scala.core._
  3. import com.github.plokhotnyuk.jsoniter_scala.macros._
  4. import io.undertow.{Undertow, UndertowOptions}
  5. case class Message(message: String)
  6. object Main extends cask.MainRoutes {
  7. implicit val codec: JsonValueCodec[Message] = JsonCodecMaker.make[Message](CodecMakerConfig())
  8. override def main(args: Array[String]): Unit = {
  9. val server = Undertow.builder
  10. .addHttpListener(8080, "0.0.0.0")
  11. // increase io thread count as per https://github.com/TechEmpower/FrameworkBenchmarks/pull/4008
  12. .setIoThreads(Runtime.getRuntime().availableProcessors() * 2)
  13. // In HTTP/1.1, connections are persistent unless declared otherwise.
  14. // Adding a "Connection: keep-alive" header to every response would only
  15. // add useless bytes.
  16. .setServerOption[java.lang.Boolean](UndertowOptions.ALWAYS_SET_KEEP_ALIVE, false)
  17. .setHandler(defaultHandler)
  18. .build
  19. server.start()
  20. }
  21. @cask.get("/plaintext")
  22. def plaintext() = {
  23. cask.Response(data = "Hello, World!",
  24. headers = Seq("Server" -> "cask", "Content-Type" -> "text/plain")
  25. )
  26. }
  27. @cask.get("/json")
  28. def json(request: cask.Request) = {
  29. cask.Response(data = writeToArray(Message("Hello, World!")),
  30. headers = Seq("Server" -> "cask", "Content-Type" -> "application/json")
  31. )
  32. }
  33. initialize()
  34. }