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