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 static abstract class SingleStringParamHandler extends Flipper {
		public abstract T handle(String arg);
	}

	public interface WebSocketListener {
		void onClose(FlipSocket flipSocket);

		void onOpen(FlipSocket flipSocket);
	}

	private final int port;
	private WebSocketListener webSocketListener;

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

	public void setWebSocketListener(final WebSocketListener webSocketListener) {
		this.webSocketListener = webSocketListener;
	}

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

			final ResourceHandler viewHandler = new ResourceHandler();
			viewHandler.setResourceBase("view");

			final HandlerList handlers = new HandlerList();

			handlers.addHandler(FileHandler.FLIP_JS);
			handlers.addHandler(staticHandler);
			handlers.addHandler(viewHandler);
			handlers.addHandler(new DynamicContentHandler());
			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(port);
			server.setHandler(handlers);
			server.start();
		} catch (final Exception e) {
			throw new RuntimeException(e);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy