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 WebSocketServletFactory webSocketFactory;
58
59 public WebSocketHandler()
60 {
61 this(new MappedByteBufferPool());
62 }
63
64 public WebSocketHandler(ByteBufferPool bufferPool)
65 {
66 WebSocketPolicy policy = new WebSocketPolicy(WebSocketBehavior.SERVER);
67 configurePolicy(policy);
68 webSocketFactory = new WebSocketServerFactory(policy, bufferPool);
69 addBean(webSocketFactory);
70 }
71
72 public abstract void configure(WebSocketServletFactory factory);
73
74 public void configurePolicy(WebSocketPolicy policy)
75 {
76
77 }
78
79 @Override
80 protected void doStart() throws Exception
81 {
82 configure(webSocketFactory);
83 super.doStart();
84 }
85
86 public WebSocketServletFactory getWebSocketFactory()
87 {
88 return webSocketFactory;
89 }
90
91 @Override
92 public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
93 {
94 if (webSocketFactory.isUpgradeRequest(request,response))
95 {
96
97 if (webSocketFactory.acceptWebSocket(request,response))
98 {
99
100 baseRequest.setHandled(true);
101 return;
102 }
103
104
105
106 if (response.isCommitted())
107 {
108
109 return;
110 }
111 }
112 super.handle(target,baseRequest,request,response);
113 }
114 }