From fd8116cfc8229d1a7b1bfd42b63351ead1c2f835 Mon Sep 17 00:00:00 2001 From: Dmitry Voronin Date: Mon, 23 Sep 2024 15:16:58 +0300 Subject: [PATCH] Main : Implement basic http server. --- src/main/scala/main.scala | 54 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/scala/main.scala b/src/main/scala/main.scala index ab5384b..938c76d 100644 --- a/src/main/scala/main.scala +++ b/src/main/scala/main.scala @@ -1,6 +1,52 @@ package com.voronind.doublegis.test -@main -def main(): Unit = { - println("Hello world!") -} \ No newline at end of file +import com.sun.net.httpserver.{HttpExchange, HttpHandler, HttpServer} + +import java.io.{InputStream, OutputStream} +import java.net.InetSocketAddress +import scala.language.postfixOps + +@main def main(): Unit = { + println("Hello world!") + val server = HttpServer.create(new InetSocketAddress(8000), 0) + server.createContext("/", new RootHandler()) + server.setExecutor(null) + + server.start() + + println("Hit any key to exit...") + System.in.read() + server.stop(0) +} + +class RootHandler extends HttpHandler { + def handle(t: HttpExchange): Unit = { + displayPayload(t.getRequestBody) + sendResponse(t) + } + + private def displayPayload(body: InputStream): Unit = { + println() + println("**** Start ****") + println() + copyStream(body, System.out) + println() + println("**** End ****") + println() + } + + private def copyStream(in: InputStream, out: OutputStream): Unit = { + Iterator + .continually(in.read) + .takeWhile(-1 !=) + .foreach(out.write) + } + + private def sendResponse(t: HttpExchange): Unit = { + val response = "Ack!" + t.sendResponseHeaders(200, response.length()) + val os = t.getResponseBody + os.write(response.getBytes) + os.close() + } +}