package untouchedwagons.minecraft.mcrc2.http.routes; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.*; import untouchedwagons.minecraft.mcrc2.http.routing.RouteHandler; import java.io.IOException; import java.io.InputStream; import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE; import static io.netty.handler.codec.http.HttpResponseStatus.NOT_FOUND; import static io.netty.handler.codec.http.HttpResponseStatus.OK; import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; public class StaticPageRoute implements RouteHandler { private final String mime_type; public StaticPageRoute(String mime_type) { this.mime_type = mime_type; } @Override public FullHttpResponse route(ChannelHandlerContext ctx, HttpMethod method, String uri, FullHttpRequest request) { if (uri.equals("/")) { uri = "/index.html"; } uri = "/assets/mcrc2/web" + uri; InputStream uri_file = this.getClass().getResourceAsStream(uri); if (uri_file == null) { return new DefaultFullHttpResponse(HTTP_1_1, NOT_FOUND); } byte[] buffer = new byte[4096]; int bytes_read; ByteBuf content = ctx.alloc().buffer(); try { while ((bytes_read = uri_file.read(buffer)) > 0) { content.writeBytes(buffer, 0, bytes_read); } } catch (IOException e) { // } FullHttpResponse res = new DefaultFullHttpResponse(HTTP_1_1, OK, content); res.headers().set(CONTENT_TYPE, String.format("%s; charset=UTF-8", this.mime_type)); HttpHeaders.setContentLength(res, content.readableBytes()); return res; } }