diff options
author | Li Haoyi <haoyi.li@databricks.com> | 2019-09-14 16:45:39 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.li@databricks.com> | 2019-09-14 17:40:26 +0800 |
commit | 4e853a9d5b9563dbe1909757bf4be4d8e7d2b36a (patch) | |
tree | 684863947658d22f91804090c81a68d012b82b6c /cask/src/cask/main/Main.scala | |
parent | 90b6806e5fb91b207f9d8e2da2a58c25928badea (diff) | |
download | cask-4e853a9d5b9563dbe1909757bf4be4d8e7d2b36a.tar.gz cask-4e853a9d5b9563dbe1909757bf4be4d8e7d2b36a.tar.bz2 cask-4e853a9d5b9563dbe1909757bf4be4d8e7d2b36a.zip |
.
Diffstat (limited to 'cask/src/cask/main/Main.scala')
-rw-r--r-- | cask/src/cask/main/Main.scala | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/cask/src/cask/main/Main.scala b/cask/src/cask/main/Main.scala index 88d7a61..7128006 100644 --- a/cask/src/cask/main/Main.scala +++ b/cask/src/cask/main/Main.scala @@ -48,7 +48,7 @@ abstract class BaseMain{ ) }.toMap - def writeResponse(exchange: HttpServerExchange, response: Response) = { + def writeResponse(exchange: HttpServerExchange, response: Response.Raw) = { response.headers.foreach{case (k, v) => exchange.getResponseHeaders.put(new HttpString(k), v) } @@ -58,7 +58,7 @@ abstract class BaseMain{ response.data.write(exchange.getOutputStream) } - def handleNotFound(): Response = { + def handleNotFound(): Response.Raw = { Response( s"Error 404: ${Status.codesToStatus(404).reason}", statusCode = 404 @@ -68,19 +68,20 @@ abstract class BaseMain{ def defaultHandler = new BlockingHandler( new HttpHandler() { - def handleRequest(exchange: HttpServerExchange): Unit = { + def handleRequest(exchange: HttpServerExchange): Unit = try { +// println("Handling Request: " + exchange.getRequestPath) val (effectiveMethod, runner) = if (exchange.getRequestHeaders.getFirst("Upgrade") == "websocket") { "websocket" -> ((r: Any) => r.asInstanceOf[WebsocketResult] match{ case l: WebsocketResult.Listener => io.undertow.Handlers.websocket(l.value).handleRequest(exchange) - case r: WebsocketResult.Response => + case r: WebsocketResult.Response[_] => writeResponseHandler(r).handleRequest(exchange) } - ) + ) } else ( exchange.getRequestMethod.toString.toLowerCase(), - (r: Any) => writeResponse(exchange, r.asInstanceOf[Response]) + (r: Any) => writeResponse(exchange, r.asInstanceOf[Response.Raw]) ) routeTries(effectiveMethod).lookup(Util.splitPath(exchange.getRequestPath).toList, Map()) match { @@ -93,7 +94,7 @@ abstract class BaseMain{ case head :: rest => head.wrapFunction( ctx, - args => rec(rest, args :: bindings).asInstanceOf[Router.Result[head.Output]] + args => rec(rest, args :: bindings).asInstanceOf[Router.Result[head.InnerReturned]] ) case Nil => @@ -116,16 +117,21 @@ abstract class BaseMain{ rec((metadata.decorators ++ routes.decorators ++ mainDecorators).toList, Nil)match{ case Router.Result.Success(res) => runner(res) case e: Router.Result.Error => - writeResponse(exchange, handleEndpointError(exchange, routes, metadata, e)) + writeResponse( + exchange, + handleEndpointError(exchange, routes, metadata, e).map(Response.Data.StringData) + ) None } } - +// println("Completed Request: " + exchange.getRequestPath) + }catch{case e: Throwable => + e.printStackTrace() } } ) - def writeResponseHandler(r: WebsocketResult.Response) = new BlockingHandler( + def writeResponseHandler(r: WebsocketResult.Response[_]) = new BlockingHandler( new HttpHandler { def handleRequest(exchange: HttpServerExchange): Unit = { writeResponse(exchange, r.value) @@ -142,15 +148,15 @@ abstract class BaseMain{ case _: Router.Result.Error.InvalidArguments => 400 case _: Router.Result.Error.MismatchedArguments => 400 } - Response( + val str = if (!debugMode) s"Error $statusCode: ${Status.codesToStatus(statusCode).reason}" else ErrorMsgs.formatInvokeError( routes, metadata.entryPoint.asInstanceOf[EntryPoint[cask.main.Routes, _]], e - ), - statusCode = statusCode - ) + ) + println(str) + Response(str, statusCode = statusCode) } |