package cz.kiwi.cometd;

import cz.kiwi.cometd.client.CometdKiwiClient;
import cz.kiwi.cometd.websocket.*;
import java.io.IOException;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.util.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//import org.webbitserver.WebServer;
//import org.webbitserver.WebServers;
/**
 * Hello world!
 *
 */
public class App 
{
    final static Logger logger = LoggerFactory.getLogger(App.class);
    public static CometdKiwiClient cometdKiwiClient = null;
    //public static WebSocketKiwiHandler webSocketKiwiHandler = new WebSocketKiwiHandler();
    
    
    public static void main( String[] args ) throws InterruptedException
    {
        /*WebServer webServer = null;
        try {
            webServer = WebServers.createWebServer(WebSocketKiwiUtils.WEBSOCKET_PORT_NUMBER)
              .add(WebSocketKiwiUtils.WEBSOCKET_SERVICE_NAME, webSocketKiwiHandler)
              .start();
             
            logger.info("WebSocket Server running at " + webServer.getUri());
        }
        catch (IOException e) {
            System.out.println("Can't start websocket server: " + e.getMessage());
            System.exit(1);
        }
        */
        /*
        WebSocketJettyServer webSocketJettyServer = null;
        
        try
        {
            int port = 1111;
            boolean verbose = true;
        
            webSocketJettyServer = new WebSocketJettyServer(port);

            webSocketJettyServer.start();
            logger.info("WebSocket Server running at port: " + port);
        }
        catch (Exception e)
        {
            logger.info(e.getMessage());
            System.exit(1);
        }*/
        
        int port=1111;
        Server webSocketJettyServer = new Server(port);

        ServletHandler servletHandler = new ServletHandler();
        servletHandler.addServletWithMapping(WebSocketJettyServlet.class,"/*");

        ResourceHandler resourceHandler = new ResourceHandler();
        resourceHandler.setBaseResource(Resource.newClassPathResource("cz/kiwi/cometd/"));

        DefaultHandler defaultHandler = new DefaultHandler();

        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] {servletHandler,resourceHandler,defaultHandler});
        webSocketJettyServer.setHandler(handlers);
 
        try {
            webSocketJettyServer.start();
            logger.info("WebSocket Server running at port: " + port);
        }
        catch (Exception e) {
            logger.info(e.getMessage());
            System.exit(1);
        }
      
  
        logger.info("Cometd java client started");
        cometdKiwiClient = new CometdKiwiClient();
       
        
        try {
            cometdKiwiClient.connect();
        }
        catch (Exception e) {
            logger.error("Cometd client connect error: " + e.getMessage());
            System.exit(1);
        }
        logger.info("Cometd java client connected");

        
        try {
            System.in.read();
        } catch (IOException e) {
            logger.error("System.in.read exception: " + e.getMessage());
            System.exit(1);
        }
        
        cometdKiwiClient.disconnect();
        logger.info("Cometd java client disconnected");
        
        try {
            webSocketJettyServer.stop(); 
            logger.info("WebSocket jetty server stopped");
        }
        catch (Exception e) {
            logger.info("Jetty server stop error: " + e.getMessage());
            System.exit(1);
        }
        
        System.exit(0);
    }
}
