1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.cometd.demo;
16
17
18 import java.util.Set;
19
20 import org.mortbay.cometd.AbstractBayeux;
21 import org.mortbay.cometd.ClientImpl;
22 import org.mortbay.cometd.continuation.ContinuationCometdServlet;
23 import org.mortbay.cometd.ext.TimesyncExtension;
24 import org.mortbay.jetty.Server;
25 import org.mortbay.jetty.bio.SocketConnector;
26 import org.mortbay.jetty.handler.ContextHandlerCollection;
27 import org.mortbay.jetty.handler.MovedContextHandler;
28 import org.mortbay.jetty.nio.SelectChannelConnector;
29 import org.mortbay.jetty.security.SslSelectChannelConnector;
30 import org.mortbay.jetty.security.SslSocketConnector;
31 import org.mortbay.jetty.servlet.Context;
32 import org.mortbay.jetty.servlet.ServletHolder;
33 import org.mortbay.resource.Resource;
34 import org.mortbay.resource.ResourceCollection;
35 import org.mortbay.thread.QueuedThreadPool;
36
37 import org.cometd.Message;
38
39
40
41
42
43
44
45
46
47
48 public class CometdDemo
49 {
50 private static int _testHandshakeFailure;
51
52
53
54
55
56 public static void main(String[] args) throws Exception
57 {
58 int port = args.length==0?8080:Integer.parseInt(args[0]);
59
60 String base="../../..";
61
62
63 Server server = new Server();
64 QueuedThreadPool qtp = new QueuedThreadPool();
65 qtp.setMinThreads(5);
66 qtp.setMaxThreads(200);
67 server.setThreadPool(qtp);
68
69 SelectChannelConnector connector=new SelectChannelConnector();
70
71 connector.setPort(port);
72 server.addConnector(connector);
73 SocketConnector bconnector=new SocketConnector();
74 bconnector.setPort(port+1);
75 server.addConnector(bconnector);
76
77 SslSelectChannelConnector connector2=new SslSelectChannelConnector();
78
79 connector2.setPort(port-80+443);
80 connector2.setKeystore(base+"/etc/keystore");
81 connector2.setPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
82 connector2.setKeyPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
83 connector2.setTruststore(base+"/etc/keystore");
84 connector2.setTrustPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
85 server.addConnector(connector2);
86
87 ContextHandlerCollection contexts = new ContextHandlerCollection();
88 server.setHandler(contexts);
89
90 MovedContextHandler moved = new MovedContextHandler(contexts,"/","/cometd");
91 moved.setDiscardPathInfo(true);
92
93 Context context = new Context(contexts,"/cometd",Context.NO_SECURITY|Context.SESSIONS);
94
95 context.setBaseResource(new ResourceCollection(new Resource[]
96 {
97 Resource.newResource("./src/main/webapp/"),
98 Resource.newResource("./target/cometd-demo-6.1.14/"),
99 }));
100
101
102
103
104
105
106
107 ContinuationCometdServlet cometd_servlet=new ContinuationCometdServlet();
108 ServletHolder cometd_holder = new ServletHolder(cometd_servlet);
109 cometd_holder.setInitParameter("filters","/WEB-INF/filters.json");
110 cometd_holder.setInitParameter("timeout","180000");
111 cometd_holder.setInitParameter("interval","100");
112 cometd_holder.setInitParameter("maxInterval","60000");
113 cometd_holder.setInitParameter("multiFrameInterval","1500");
114 cometd_holder.setInitParameter("directDeliver","true");
115 cometd_holder.setInitParameter("logLevel","1");
116
117 context.addServlet(cometd_holder, "/cometd/*");
118 context.addServlet("org.mortbay.jetty.servlet.DefaultServlet", "/");
119 context.addEventListener(new BayeuxServicesListener());
120
121 server.start();
122
123 AbstractBayeux bayeux = cometd_servlet.getBayeux();
124 bayeux.addExtension(new TimesyncExtension());
125
126 bayeux.setSecurityPolicy(new AbstractBayeux.DefaultPolicy(){
127 public boolean canHandshake(Message message)
128 {
129 if (_testHandshakeFailure<0)
130 {
131 _testHandshakeFailure++;
132 return false;
133 }
134 return true;
135 }
136
137 });
138
139 while (true)
140 {
141 Thread.sleep(2000);
142 Set<String> ids=bayeux.getClientIDs();
143 ClientImpl[] clients=new ClientImpl[ids.size()];
144 int i=0;
145 for (String id : ids)
146 {
147 clients[i]=(ClientImpl)bayeux.getClient(id);
148 i++;
149 }
150 i=0;
151 }
152 }
153 }