
org.bitbucket.gkutiel.in.Server Maven / Gradle / Ivy
package org.bitbucket.gkutiel.in;
import static io.reactivex.netty.RxNetty.createHttpServer;
import io.netty.buffer.ByteBuf;
import io.reactivex.netty.protocol.http.server.HttpServerRequest;
import io.reactivex.netty.protocol.http.server.HttpServerResponse;
import java.util.LinkedList;
import java.util.List;
public class Server {
private class ServerHandler {
private final HttpServerRequest req;
private final HttpServerResponse res;
public ServerHandler(final HttpServerRequest req, final HttpServerResponse res) {
this.req = req;
this.res = res;
}
Handler filter(final Handler handler) {
for (final Filter filter : filters)
filter.filter(req, res, handler);
return handler;
}
public void handle() {
handle(dispatcher.handler(req));
}
private void handle(final Handler handler) {
if (handler == null) return;
handler.req = req;
handler.res = res;
filter(handler).handle();
handle(handler.next());
}
}
public static Server use(final int port, final Dispatcher dispatcher) {
return new Server(port, dispatcher);
}
final List filters = new LinkedList<>();
private final int port;
final Dispatcher dispatcher;
private Server(final int port, final Dispatcher dispatcher) {
this.port = port;
this.dispatcher = dispatcher;
}
public Server addFilter(final Filter filter) {
filters.add(filter);
return this;
}
public void start() {
createHttpServer(port, (req, res) -> {
new ServerHandler(req, res).handle();
return res.close();
}).startAndWait();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy