package netflix.karyon.transport.http; import io.reactivex.netty.protocol.http.server.HttpServerRequest; import io.reactivex.netty.protocol.http.server.HttpServerResponse; import io.reactivex.netty.protocol.http.server.RequestHandler; import netflix.karyon.transport.interceptor.AbstractInterceptorSupport; import netflix.karyon.transport.interceptor.InterceptorExecutor; import rx.Observable; /** * An implementation of {@link RequestHandler} for karyon. * * @author Nitesh Kant */ public class HttpRequestHandler<I, O> implements RequestHandler<I, O> { private final InterceptorExecutor<HttpServerRequest<I>, HttpServerResponse<O>, HttpKeyEvaluationContext> executor; public HttpRequestHandler(RequestHandler<I, O> router) { this(router, new HttpInterceptorSupport<I, O>()); } public HttpRequestHandler(RequestHandler<I, O> router, AbstractInterceptorSupport<HttpServerRequest<I>, HttpServerResponse<O>, HttpKeyEvaluationContext, ?, ?> interceptorSupport) { executor = new InterceptorExecutor<HttpServerRequest<I>, HttpServerResponse<O>, HttpKeyEvaluationContext>(interceptorSupport, router); } @Override public Observable<Void> handle(HttpServerRequest<I> request, HttpServerResponse<O> response) { return executor.execute(request, response, new HttpKeyEvaluationContext(response.getChannel())); } }