1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.client.io;
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.EndPoint;
26 import org.eclipse.jetty.websocket.api.BatchMode;
27 import org.eclipse.jetty.websocket.api.WebSocketPolicy;
28 import org.eclipse.jetty.websocket.api.WriteCallback;
29 import org.eclipse.jetty.websocket.api.extensions.Frame;
30 import org.eclipse.jetty.websocket.api.extensions.IncomingFrames;
31 import org.eclipse.jetty.websocket.client.masks.Masker;
32 import org.eclipse.jetty.websocket.common.WebSocketFrame;
33 import org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection;
34
35
36
37
38 public class WebSocketClientConnection extends AbstractWebSocketConnection
39 {
40 private final ConnectPromise connectPromise;
41 private final Masker masker;
42 private final AtomicBoolean opened = new AtomicBoolean(false);
43
44 public WebSocketClientConnection(EndPoint endp, Executor executor, ConnectPromise connectPromise, WebSocketPolicy policy)
45 {
46 super(endp,executor,connectPromise.getClient().getScheduler(),policy,connectPromise.getClient().getBufferPool());
47 this.connectPromise = connectPromise;
48 this.masker = connectPromise.getMasker();
49 assert (this.masker != null);
50 }
51
52 @Override
53 public InetSocketAddress getLocalAddress()
54 {
55 return getEndPoint().getLocalAddress();
56 }
57
58 @Override
59 public InetSocketAddress getRemoteAddress()
60 {
61 return getEndPoint().getRemoteAddress();
62 }
63
64 @Override
65 public void onOpen()
66 {
67 super.onOpen();
68 boolean beenOpened = opened.getAndSet(true);
69 if (!beenOpened)
70 {
71 connectPromise.succeeded();
72 }
73 }
74
75
76
77
78 @Override
79 public void outgoingFrame(Frame frame, WriteCallback callback, BatchMode batchMode)
80 {
81 if (frame instanceof WebSocketFrame)
82 {
83 masker.setMask((WebSocketFrame)frame);
84 }
85 super.outgoingFrame(frame,callback, batchMode);
86 }
87
88 @Override
89 public void setNextIncomingFrames(IncomingFrames incoming)
90 {
91 getParser().setIncomingFramesHandler(incoming);
92 }
93 }