All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.gkutiel.flip.web.Flip Maven / Gradle / Ivy

package com.github.gkutiel.flip.web;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class Flip {

	public interface WebSocketListener {
		void onClose(FlipSocket flipSocket);

		void onOpen(FlipSocket flipSocket);
	}

	private final DynamicContentHandler dynamicContentHandler = new DynamicContentHandler();

	private final int port;

	public Flip(final int port) {
		this.port = port;
	}

	public Flip catchAll(final String prefix, final Class clazz) {
		this.dynamicContentHandler.catchAll(prefix, clazz);
		return this;
	}

	public void start() {
		this.start(null);
	}

	public void start(final WebSocketListener webSocketListener) {
		try {
			final ResourceHandler resourceHandler = new ResourceHandler();
			resourceHandler.setResourceBase("web");
			resourceHandler.setWelcomeFiles(new String[] { "index.xml", "index.html" });

			final HandlerList handlers = new HandlerList();

			handlers.addHandler(this.dynamicContentHandler);
			handlers.addHandler(FileHandler.FLIP_JS);
			handlers.addHandler(resourceHandler);
			handlers.addHandler(FileHandler.FAVICON_ICO);

			if (webSocketListener != null) {
				final ServletContextHandler servletContextHandler = new ServletContextHandler(handlers, "/");
				servletContextHandler.addServlet(new ServletHolder(new WebSocketHandler(webSocketListener)), "/ws");
			}

			final Server server = new Server(this.port);
			server.setHandler(handlers);
			server.start();
		} catch (final Exception e) {
			throw new RuntimeException(e);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy