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.net.InetSocketAddress;
22 import java.util.concurrent.Executor;
23 import java.util.concurrent.atomic.AtomicBoolean;
24
25 import org.eclipse.jetty.io.ByteBufferPool;
26 import org.eclipse.jetty.io.EndPoint;
27 import org.eclipse.jetty.util.thread.Scheduler;
28 import org.eclipse.jetty.websocket.api.WebSocketPolicy;
29 import org.eclipse.jetty.websocket.api.extensions.IncomingFrames;
30 import org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection;
31
32 public class WebSocketServerConnection extends AbstractWebSocketConnection
33 {
34 private final WebSocketServerFactory factory;
35 private final AtomicBoolean opened = new AtomicBoolean(false);
36
37 public WebSocketServerConnection(EndPoint endp, Executor executor, Scheduler scheduler, WebSocketPolicy policy, ByteBufferPool bufferPool,
38 WebSocketServerFactory factory)
39 {
40 super(endp,executor,scheduler,policy,bufferPool);
41 if (policy.getIdleTimeout() > 0)
42 {
43 endp.setIdleTimeout(policy.getIdleTimeout());
44 }
45 this.factory = factory;
46 }
47
48 @Override
49 public InetSocketAddress getLocalAddress()
50 {
51 return getEndPoint().getLocalAddress();
52 }
53
54 @Override
55 public InetSocketAddress getRemoteAddress()
56 {
57 return getEndPoint().getRemoteAddress();
58 }
59
60 @Override
61 public void onClose()
62 {
63 super.onClose();
64 factory.sessionClosed(getSession());
65 }
66
67 @Override
68 public void onOpen()
69 {
70 boolean beenOpened = opened.getAndSet(true);
71 if (!beenOpened)
72 {
73 factory.sessionOpened(getSession());
74 }
75 super.onOpen();
76 }
77
78 @Override
79 public void onWriteWebSocketClose()
80 {
81
82 disconnect();
83 }
84
85 @Override
86 public void setNextIncomingFrames(IncomingFrames incoming)
87 {
88 getParser().setIncomingFramesHandler(incoming);
89 }
90 }