Package com.vtence.molecule

Source Code of com.vtence.molecule.WebServer

package com.vtence.molecule;

import com.vtence.molecule.middlewares.FilterMap;
import com.vtence.molecule.lib.Middleware;
import com.vtence.molecule.lib.MiddlewareStack;
import com.vtence.molecule.middlewares.Router;
import com.vtence.molecule.routing.RouteBuilder;
import com.vtence.molecule.servers.SimpleServer;

import java.io.IOException;
import java.net.URI;

public class WebServer {

    public static final String LOCAL_ADDRESS = "0.0.0.0";
    public static final int DEFAULT_PORT = 8080;

    private final Server server;
    private final MiddlewareStack stack;

    public static WebServer create() {
        return create(DEFAULT_PORT);
    }

    public static WebServer create(int port) {
        return create(LOCAL_ADDRESS, port);
    }

    public static WebServer create(String host, int port) {
        return new WebServer(new SimpleServer(host, port));
    }

    public WebServer(Server server) {
        this.server = server;
        this.stack = new MiddlewareStack();
    }

    public WebServer failureReporter(FailureReporter reporter) {
        server.reportErrorsTo(reporter);
        return this;
    }

    public WebServer add(Middleware middleware) {
        stack.use(middleware);
        return this;
    }

    public WebServer filter(String path, Middleware filter) {
        stack.use(new FilterMap().map(path, filter));
        return this;
    }

    public Server start(RouteBuilder routes) throws IOException {
        return start(Router.draw(routes));
    }

    public Server start(Application application) throws IOException {
        stack.run(application);
        server.run(stack);
        return server;
    }

    public void stop() throws IOException {
        server.shutdown();
    }

    public URI uri() {
        return URI.create("http://" + server.host() + ":" + server.port());
    }
}
TOP

Related Classes of com.vtence.molecule.WebServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.