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