irc-search/src/main/scala/net/abhinavsarkar/ircsearch/HttpRequestRouter.scala

33 lines
1.0 KiB
Scala

package net.abhinavsarkar.ircsearch
import io.netty.channel.ChannelHandler.Sharable
import io.netty.channel.ChannelHandlerContext
import io.netty.handler.codec.http.HttpRequest
@Sharable
abstract class HttpRequestRouter extends HttpRequestHandler {
def route : PartialFunction[String, HttpRequestHandler]
override def messageReceived(ctx: ChannelHandlerContext, request: HttpRequest) {
if (request.getDecoderResult.isSuccess) {
val uri = request.getUri
if (route.isDefinedAt(uri)) {
val routeHandler = route.apply(uri)
ctx.pipeline.addLast("httphandler", routeHandler)
try {
ctx.nextInboundMessageBuffer.add(request)
ctx.fireInboundBufferUpdated
} finally {
ctx.pipeline.remove("httphandler")
}
} else {
logRequest(ctx, request, sendNotFound(ctx, request))
}
} else {
logger.warn("Could not decode request: {}", request)
logRequest(ctx, request, sendDefaultResponse(ctx, request))
}
}
}