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.MessageImpl;
23 import org.mortbay.cometd.continuation.ContinuationCometdServlet;
24 import org.mortbay.cometd.ext.TimesyncExtension;
25 import org.mortbay.jetty.Server;
26 import org.mortbay.jetty.bio.SocketConnector;
27 import org.mortbay.jetty.handler.ContextHandlerCollection;
28 import org.mortbay.jetty.handler.MovedContextHandler;
29 import org.mortbay.jetty.nio.SelectChannelConnector;
30 import org.mortbay.jetty.security.SslSelectChannelConnector;
31 import org.mortbay.jetty.security.SslSocketConnector;
32 import org.mortbay.jetty.servlet.Context;
33 import org.mortbay.jetty.servlet.ServletHolder;
34 import org.mortbay.resource.Resource;
35 import org.mortbay.resource.ResourceCollection;
36 import org.mortbay.thread.QueuedThreadPool;
37
38 import org.cometd.Client;
39 import org.cometd.Extension;
40 import org.cometd.Message;
41
42
43
44
45
46
47
48
49 public class CometdDemo
50 {
51 private static int _testHandshakeFailure;
52
53
54
55
56
57 public static void main(String[] args) throws Exception
58 {
59 int port = args.length==0?8080:Integer.parseInt(args[0]);
60
61 String base="../../..";
62
63
64 Server server = new Server();
65 QueuedThreadPool qtp = new QueuedThreadPool();
66 qtp.setMinThreads(5);
67 qtp.setMaxThreads(200);
68 server.setThreadPool(qtp);
69
70 SelectChannelConnector connector=new SelectChannelConnector();
71
72 connector.setPort(port);
73 server.addConnector(connector);
74 SocketConnector bconnector=new SocketConnector();
75 bconnector.setPort(port+1);
76 server.addConnector(bconnector);
77
78 SslSelectChannelConnector connector2=new SslSelectChannelConnector();
79
80 connector2.setPort(port-80+443);
81 connector2.setKeystore(base+"/etc/keystore");
82 connector2.setPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
83 connector2.setKeyPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
84 connector2.setTruststore(base+"/etc/keystore");
85 connector2.setTrustPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
86 server.addConnector(connector2);
87
88 ContextHandlerCollection contexts = new ContextHandlerCollection();
89 server.setHandler(contexts);
90
91 MovedContextHandler moved = new MovedContextHandler(contexts,"/","/cometd");
92 moved.setDiscardPathInfo(true);
93
94 Context context = new Context(contexts,"/cometd",Context.NO_SECURITY|Context.SESSIONS);
95
96 context.setBaseResource(new ResourceCollection(new Resource[]
97 {
98 Resource.newResource("./src/main/webapp/"),
99 Resource.newResource("./target/cometd-demo-6.1-SNAPSHOT/"),
100 }));
101
102
103
104
105
106
107
108 ContinuationCometdServlet cometd_servlet=new ContinuationCometdServlet();
109 ServletHolder cometd_holder = new ServletHolder(cometd_servlet);
110 cometd_holder.setInitParameter("filters","/WEB-INF/filters.json");
111 cometd_holder.setInitParameter("timeout","180000");
112 cometd_holder.setInitParameter("interval","100");
113 cometd_holder.setInitParameter("maxInterval","60000");
114 cometd_holder.setInitParameter("multiFrameInterval","5000");
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
125 bayeux.setSecurityPolicy(new AbstractBayeux.DefaultPolicy(){
126 public boolean canHandshake(Message message)
127 {
128 if (_testHandshakeFailure<0)
129 {
130 _testHandshakeFailure++;
131 return false;
132 }
133 return true;
134 }
135 });
136
137
138 if (Boolean.getBoolean("LAZY"))
139 {
140 bayeux.addExtension(new Extension()
141 {
142 public Message rcv(Client from, Message message)
143 {
144 if (message.getChannel().startsWith("/chat/") && message.getData()!=null && message.getData().toString().indexOf("lazy")>=0)
145 ((MessageImpl)message).setLazy(true);
146 return message;
147 }
148 public Message rcvMeta(Client from, Message message)
149 {
150 return message;
151 }
152 public Message send(Client from, Message message)
153 {
154 return message;
155 }
156 public Message sendMeta(Client from, Message message)
157 {
158 return message;
159 }
160 });
161 }
162
163 }
164 }