33 lines
1.0 KiB
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))
|
|
}
|
|
}
|
|
|
|
} |