package untouchedwagons.minecraft.mcrc2.http.routing; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.DefaultFullHttpResponse; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpMethod; import untouchedwagons.minecraft.mcrc2.http.exceptions.RouteNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import static io.netty.handler.codec.http.HttpResponseStatus.NOT_FOUND; import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; public class Router { private List<Route> routes; public Router() { this.routes = new ArrayList<Route>(); } public void addRoute(Route route) { this.routes.add(route); } public void addRoute(HttpMethod method, String path, RouteHandler handler) { this.routes.add(new Route(method, path, handler)); } public void addRoute(HttpMethod method, Pattern pattern, RouteHandler handler) { this.routes.add(new Route(method, pattern, handler)); } public FullHttpResponse dispatch (ChannelHandlerContext ctx, FullHttpRequest request) { for (Route route : this.routes) { if (route.getMethod() != request.getMethod()) { continue; } if (!route.getPattern().matcher(request.getUri()).find()) { continue; } return route.getHandler().route(ctx, request.getMethod(), request.getUri(), request); } return new DefaultFullHttpResponse(HTTP_1_1, NOT_FOUND); } }