From 359d4af5ca8fa1e0ccb7180fc1141bed590a031c Mon Sep 17 00:00:00 2001 From: Dmitry Voronin Date: Mon, 23 Sep 2024 15:40:08 +0300 Subject: [PATCH] Main : Split handler to separate models. --- src/main/scala/main.scala | 43 ++----------------- .../model/handler/TitleCrawlerHandler.scala | 31 +++++++++++++ src/main/scala/model/lib/StreamUtil.scala | 14 ++++++ 3 files changed, 49 insertions(+), 39 deletions(-) create mode 100644 src/main/scala/model/handler/TitleCrawlerHandler.scala create mode 100644 src/main/scala/model/lib/StreamUtil.scala diff --git a/src/main/scala/main.scala b/src/main/scala/main.scala index 938c76d..6f66670 100644 --- a/src/main/scala/main.scala +++ b/src/main/scala/main.scala @@ -1,52 +1,17 @@ package com.voronind.doublegis.test -import com.sun.net.httpserver.{HttpExchange, HttpHandler, HttpServer} - -import java.io.{InputStream, OutputStream} +import model.handler.TitleCrawlerHandler +import com.sun.net.httpserver.HttpServer 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.createContext(TitleCrawlerHandler.context, new TitleCrawlerHandler()) server.setExecutor(null) server.start() - println("Hit any key to exit...") + println("Server started! Input 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() - } -} diff --git a/src/main/scala/model/handler/TitleCrawlerHandler.scala b/src/main/scala/model/handler/TitleCrawlerHandler.scala new file mode 100644 index 0000000..d94a71d --- /dev/null +++ b/src/main/scala/model/handler/TitleCrawlerHandler.scala @@ -0,0 +1,31 @@ +package com.voronind.doublegis.test +package model.handler + +import model.lib.StreamUtil +import com.sun.net.httpserver.{HttpExchange, HttpHandler} +import java.io.InputStream + +class TitleCrawlerHandler extends HttpHandler { + def handle(t: HttpExchange): Unit = { + log(t.getRequestBody) + sendResponse(t) + } + + private def log(body: InputStream): Unit = { + println(f"${TitleCrawlerHandler.context}%s : Got payload.") + StreamUtil.copyStream(body, System.out) + println() + } + + private def sendResponse(t: HttpExchange): Unit = { + val response = "Ack!" + t.sendResponseHeaders(200, response.length()) + val os = t.getResponseBody + os.write(response.getBytes) + os.close() + } +} + +object TitleCrawlerHandler { + val context = "/crawl_title" +} diff --git a/src/main/scala/model/lib/StreamUtil.scala b/src/main/scala/model/lib/StreamUtil.scala new file mode 100644 index 0000000..c68fc45 --- /dev/null +++ b/src/main/scala/model/lib/StreamUtil.scala @@ -0,0 +1,14 @@ +package com.voronind.doublegis.test +package model.lib + +import java.io.{InputStream, OutputStream} +import scala.language.postfixOps + +object StreamUtil { + def copyStream(in: InputStream, out: OutputStream): Unit = { + Iterator + .continually(in.read) + .takeWhile(-1 !=) + .foreach(out.write) + } +}