From a873d77fbeb4590dceeb893ab067beb9058db241 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 13 Aug 2018 15:00:14 +0800 Subject: Tweak websocket tests, example and docs --- cask/src/cask/endpoints/FormEndpoint.scala | 2 +- cask/src/cask/endpoints/JsonEndpoint.scala | 2 +- cask/src/cask/endpoints/StaticEndpoints.scala | 7 +++---- cask/src/cask/main/Main.scala | 19 +++++++++---------- 4 files changed, 14 insertions(+), 16 deletions(-) (limited to 'cask') diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala index eb882fa..a952a2a 100644 --- a/cask/src/cask/endpoints/FormEndpoint.scala +++ b/cask/src/cask/endpoints/FormEndpoint.scala @@ -43,7 +43,7 @@ object FormReader{ def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormFile]) } } -class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint with HttpDecorator{ +class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint { type Output = Response val methods = Seq("post") diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala index f3b0cae..f91b888 100644 --- a/cask/src/cask/endpoints/JsonEndpoint.scala +++ b/cask/src/cask/endpoints/JsonEndpoint.scala @@ -26,7 +26,7 @@ object JsReader{ } } } -class postJson(val path: String, override val subpath: Boolean = false) extends Endpoint with HttpDecorator{ +class postJson(val path: String, override val subpath: Boolean = false) extends Endpoint{ type Output = Response val methods = Seq("post") type Input = ujson.Js.Value diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala index a9b3193..726af21 100644 --- a/cask/src/cask/endpoints/StaticEndpoints.scala +++ b/cask/src/cask/endpoints/StaticEndpoints.scala @@ -1,10 +1,9 @@ package cask.endpoints -import cask.internal.Router -import cask.main.{Endpoint, HttpDecorator} -import cask.model.{ParamContext, Response} +import cask.main.Endpoint +import cask.model.ParamContext -class static(val path: String) extends Endpoint with HttpDecorator{ +class static(val path: String) extends Endpoint{ type Output = String val methods = Seq("get") type Input = Seq[String] diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index 94d0e14..1b69597 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -53,8 +53,8 @@ abstract class BaseMain{ ) } - def genericWebsocketHandler(exchange0: HttpServerExchange) = - hello(exchange0, "websocket", ParamContext(exchange0, _), exchange0.getRequestPath).foreach{ r => + def websocketEndpointHandler(exchange0: HttpServerExchange) = + invokeEndpointFunction(exchange0, "websocket", exchange0.getRequestPath).foreach{ r => r.asInstanceOf[WebsocketResult] match{ case l: WebsocketResult.Listener => io.undertow.Handlers.websocket(l.value).handleRequest(exchange0) @@ -67,10 +67,9 @@ abstract class BaseMain{ new HttpHandler() { def handleRequest(exchange: HttpServerExchange): Unit = { if (exchange.getRequestHeaders.getFirst("Upgrade") == "websocket") { - - genericWebsocketHandler(exchange) + websocketEndpointHandler(exchange) } else { - defaultHttpHandler.handleRequest(exchange) + httpEndpointHandler.handleRequest(exchange) } } } @@ -82,24 +81,24 @@ abstract class BaseMain{ } } ) - def defaultHttpHandler = new BlockingHandler( + + def httpEndpointHandler = new BlockingHandler( new HttpHandler() { def handleRequest(exchange: HttpServerExchange) = { - hello(exchange, exchange.getRequestMethod.toString.toLowerCase(), ParamContext(exchange, _), exchange.getRequestPath).foreach{ r => + invokeEndpointFunction(exchange, exchange.getRequestMethod.toString.toLowerCase(), exchange.getRequestPath).foreach{ r => writeResponse(exchange, r.asInstanceOf[Response]) } } } ) - def hello(exchange0: HttpServerExchange, effectiveMethod: String, ctx0: Seq[String] => ParamContext, path: String) = { + def invokeEndpointFunction(exchange0: HttpServerExchange, effectiveMethod: String, path: String) = { routeTries(effectiveMethod).lookup(Util.splitPath(path).toList, Map()) match{ case None => writeResponse(exchange0, handleNotFound()) None case Some(((routes, metadata), extBindings, remaining)) => val ctx = ParamContext(exchange0, remaining) - val ctx1 = ctx0(remaining) def rec(remaining: List[Decorator], bindings: List[Map[String, Any]]): Router.Result[Any] = try { remaining match { @@ -110,7 +109,7 @@ abstract class BaseMain{ metadata.endpoint.wrapFunction(ctx, epBindings => metadata.entryPoint .asInstanceOf[EntryPoint[cask.main.Routes, cask.model.ParamContext]] - .invoke(routes, ctx1, (epBindings ++ extBindings.mapValues(metadata.endpoint.wrapPathSegment)) :: bindings.reverse) + .invoke(routes, ctx, (epBindings ++ extBindings.mapValues(metadata.endpoint.wrapPathSegment)) :: bindings.reverse) .asInstanceOf[Router.Result[Nothing]] ) } -- cgit v1.2.3