Package org.cometd.demo

Source Code of org.cometd.demo.CometdDemo

// ========================================================================
// Copyright 2007 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//========================================================================

package org.cometd.demo;


import java.util.Set;

import org.mortbay.cometd.AbstractBayeux;
import org.mortbay.cometd.ClientImpl;
import org.mortbay.cometd.continuation.ContinuationCometdServlet;
import org.mortbay.cometd.ext.TimesyncExtension;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.handler.ContextHandlerCollection;
import org.mortbay.jetty.handler.MovedContextHandler;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.security.SslSelectChannelConnector;
import org.mortbay.jetty.security.SslSocketConnector;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.resource.Resource;
import org.mortbay.resource.ResourceCollection;
import org.mortbay.thread.QueuedThreadPool;

import org.cometd.Message;


/* ------------------------------------------------------------ */
/** Main class for cometd demo.
*
* @author gregw
*
*/
public class CometdDemo
{
    private static int _testHandshakeFailure;
   
    /* ------------------------------------------------------------ */
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception
    {
        int port = args.length==0?8080:Integer.parseInt(args[0]);
    
        String base="../../..";
       
        // Manually contruct context to avoid hassles with webapp classloaders for now.
        Server server = new Server();
        QueuedThreadPool qtp = new QueuedThreadPool();
        qtp.setMinThreads(5);
        qtp.setMaxThreads(200);
        server.setThreadPool(qtp);
       
        SelectChannelConnector connector=new SelectChannelConnector();
        // SocketConnector connector=new SocketConnector();
        connector.setPort(port);
        server.addConnector(connector);
        SocketConnector bconnector=new SocketConnector();
        bconnector.setPort(port+1);
        server.addConnector(bconnector);
       
        SslSelectChannelConnector connector2=new SslSelectChannelConnector();
        // SslSocketConnector connector2=new SslSocketConnector();
        connector2.setPort(port-80+443);
        connector2.setKeystore(base+"/etc/keystore");
        connector2.setPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
        connector2.setKeyPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
        connector2.setTruststore(base+"/etc/keystore");
        connector2.setTrustPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
        server.addConnector(connector2)

        ContextHandlerCollection contexts = new ContextHandlerCollection();
        server.setHandler(contexts);
       
        MovedContextHandler moved = new MovedContextHandler(contexts,"/","/cometd");
        moved.setDiscardPathInfo(true);
       
        Context context = new Context(contexts,"/cometd",Context.NO_SECURITY|Context.SESSIONS);
       
        context.setBaseResource(new ResourceCollection(new Resource[]
        {
            Resource.newResource("./src/main/webapp/"),
            Resource.newResource("./target/cometd-demo-6.1-SNAPSHOT/"),
        }));
       
        // Demo bayeux session manager
        // context.getSessionHandler().setSessionManager(new BayeuxSessionManager());
        // context.addServlet(com.acme.SessionDump.class,"/session");
        // context.addServlet(com.acme.Dump.class,"/dump");
       
        // Cometd servlet
        ContinuationCometdServlet cometd_servlet=new ContinuationCometdServlet();
        ServletHolder cometd_holder = new ServletHolder(cometd_servlet);
        cometd_holder.setInitParameter("filters","/WEB-INF/filters.json");
        cometd_holder.setInitParameter("timeout","180000");
        cometd_holder.setInitParameter("interval","100");
        cometd_holder.setInitParameter("maxInterval","60000");
        cometd_holder.setInitParameter("multiFrameInterval","1500");
        cometd_holder.setInitParameter("directDeliver","true");
        cometd_holder.setInitParameter("logLevel","1");
       
        context.addServlet(cometd_holder, "/cometd/*");
        context.addServlet("org.mortbay.jetty.servlet.DefaultServlet", "/");
        context.addEventListener(new BayeuxServicesListener());
       
        server.start();
       
        AbstractBayeux bayeux = cometd_servlet.getBayeux();
       
        bayeux.setSecurityPolicy(new AbstractBayeux.DefaultPolicy(){
            public boolean canHandshake(Message message)
            {
                if (_testHandshakeFailure<0)
                {
                    _testHandshakeFailure++;
                    return false;
                }
                return true;
            }
           
        });
       
        while (true)
        {
            Thread.sleep(2000);
            Set<String> ids=bayeux.getClientIDs();
            ClientImpl[] clients=new ClientImpl[ids.size()];
            int i=0;
            for (String id : ids)
            {
                clients[i]=(ClientImpl)bayeux.getClient(id);
                i++;
            }
            i=0;
        }
    }
}
TOP

Related Classes of org.cometd.demo.CometdDemo

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.