1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.server;
20
21 import java.io.IOException;
22
23 import javax.servlet.ServletException;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26
27 import org.eclipse.jetty.io.ByteBufferPool;
28 import org.eclipse.jetty.io.MappedByteBufferPool;
29 import org.eclipse.jetty.server.Request;
30 import org.eclipse.jetty.server.handler.HandlerWrapper;
31 import org.eclipse.jetty.websocket.api.WebSocketBehavior;
32 import org.eclipse.jetty.websocket.api.WebSocketPolicy;
33 import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
34
35 public abstract class WebSocketHandler extends HandlerWrapper
36 {
37
38
39
40 public static class Simple extends WebSocketHandler
41 {
42 private Class<?> websocketPojo;
43
44 public Simple(Class<?> websocketClass)
45 {
46 super();
47 this.websocketPojo = websocketClass;
48 }
49
50 @Override
51 public void configure(WebSocketServletFactory factory)
52 {
53 factory.register(websocketPojo);
54 }
55 }
56
57 private final ByteBufferPool bufferPool;
58 private WebSocketServletFactory webSocketFactory;
59
60 public WebSocketHandler()
61 {
62 this(new MappedByteBufferPool());
63 }
64
65 public WebSocketHandler(ByteBufferPool bufferPool)
66 {
67 this.bufferPool = bufferPool;
68 }
69
70 public abstract void configure(WebSocketServletFactory factory);
71
72 public void configurePolicy(WebSocketPolicy policy)
73 {
74
75 }
76
77 @Override
78 protected void doStart() throws Exception
79 {
80 WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
81 configurePolicy(policy);
82 webSocketFactory = new WebSocketServerFactory(policy, getServer().getThreadPool(), bufferPool);
83 addBean(webSocketFactory);
84 configure(webSocketFactory);
85 super.doStart();
86 }
87
88 public WebSocketServletFactory getWebSocketFactory()
89 {
90 if (!isRunning())
91 throw new IllegalStateException("Not Started yet");
92 return webSocketFactory;
93 }
94
95 @Override
96 public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
97 {
98 if (webSocketFactory.isUpgradeRequest(request,response))
99 {
100
101 if (webSocketFactory.acceptWebSocket(request,response))
102 {
103
104 baseRequest.setHandled(true);
105 return;
106 }
107
108
109
110 if (response.isCommitted())
111 {
112
113 return;
114 }
115 }
116 super.handle(target,baseRequest,request,response);
117 }
118 }