Skip to content

Commit

Permalink
refactor(service): simplify request handler
Browse files Browse the repository at this point in the history
  • Loading branch information
tusharmath committed Mar 18, 2021
1 parent aced7ef commit e495460
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 26 deletions.
2 changes: 1 addition & 1 deletion zio-http/src/main/scala/zhttp/service/Client.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package zhttp.service

import io.netty.handler.codec.http.{HttpVersion => JHttpVersion}
import zhttp.core._
import zhttp.http.{Request, Response}
import zhttp.service
import zhttp.service.client.{ClientChannelInitializer, ClientHttpChannelReader, ClientInboundHandler}
import io.netty.handler.codec.http.{HttpVersion => JHttpVersion}
import zio.{Promise, Task, ZIO}

import java.net.InetSocketAddress
Expand Down
7 changes: 3 additions & 4 deletions zio-http/src/main/scala/zhttp/service/HttpMessageCodec.scala
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package zhttp.service

import io.netty.handler.codec.http.{HttpHeaderNames => JHttpHeaderNames, HttpVersion => JHttpVersion}
import io.netty.buffer.{Unpooled => JUnpooled}

import java.time.format.DateTimeFormatter
import zhttp.http._
import io.netty.handler.codec.http.{HttpHeaderNames => JHttpHeaderNames, HttpVersion => JHttpVersion}
import zhttp.core._
import zhttp.http._

import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter

trait HttpMessageCodec {
private val jTrailingHeaders = new JDefaultHttpHeaders(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,25 @@ final case class ServerRequestHandler[R](
()
}

def writeAndFlush(ctx: JChannelHandlerContext, jReq: JFullHttpRequest, res: Response): Unit = {
res match {
/**
* Asynchronously executes the Http app and passes the response to the callback.
*/
private def executeAsync(ctx: JChannelHandlerContext, jReq: JFullHttpRequest)(cb: Response => Unit): Unit =
app.eval(decodeJRequest(jReq)) match {
case HttpResult.Success(a) => cb(a)
case HttpResult.Failure(_) => ()
case HttpResult.Continue(z) =>
zExec.unsafeExecute(ctx, z) {
case Exit.Success(res) => cb(res)
case Exit.Failure(_) => ()
}
}

/**
* Unsafe channel reader for HttpRequest
*/
override def channelRead0(ctx: JChannelHandlerContext, jReq: JFullHttpRequest): Unit = {
executeAsync(ctx, jReq) {
case res @ Response.HttpResponse(_, _, _) =>
ctx.writeAndFlush(encodeResponse(jReq.protocolVersion(), res), ctx.channel().voidPromise())
releaseOrIgnore(jReq)
Expand All @@ -68,25 +85,6 @@ final case class ServerRequestHandler[R](
}
}

/**
* Unsafe channel reader for HttpRequest
*/
override def channelRead0(ctx: JChannelHandlerContext, jReq: JFullHttpRequest /* jReq.refCount = 1 */ ): Unit = {
app.eval(decodeJRequest(jReq)) match {
case HttpResult.Success(a) =>
self.writeAndFlush(ctx, jReq, a)
()
case HttpResult.Continue(zio) =>
zExec.unsafeExecute(ctx, zio) {
case Exit.Success(res) =>
writeAndFlush(ctx, jReq, res)
()
case _ => ()
}
case _ => ()
}
}

/**
* Handles exceptions that throws
*/
Expand Down

0 comments on commit e495460

Please sign in to comment.