18
18
package org .openqa .selenium .remote .http .netty ;
19
19
20
20
import org .asynchttpclient .AsyncHttpClient ;
21
+ import org .asynchttpclient .ws .WebSocketListener ;
22
+ import org .asynchttpclient .ws .WebSocketUpgradeHandler ;
21
23
import org .openqa .selenium .remote .http .ClientConfig ;
22
24
import org .openqa .selenium .remote .http .Filter ;
23
25
import org .openqa .selenium .remote .http .HttpRequest ;
26
28
27
29
import java .io .UncheckedIOException ;
28
30
import java .util .Objects ;
31
+ import java .util .concurrent .ExecutionException ;
29
32
import java .util .concurrent .atomic .AtomicReference ;
30
33
import java .util .function .BiFunction ;
31
34
import java .util .function .Function ;
32
35
33
36
class NettyWebSocket implements WebSocket {
34
37
35
- private NettyWebSocket (AsyncHttpClient client , Listener listener ) {
38
+ private org .asynchttpclient .ws .WebSocket socket ;
39
+
40
+ private NettyWebSocket (AsyncHttpClient client , org .asynchttpclient .Request request , Listener listener ) {
36
41
Objects .requireNonNull (client , "HTTP client to use must be set." );
37
42
Objects .requireNonNull (listener , "WebSocket listener must be set." );
43
+
44
+ try {
45
+ socket = client .prepareGet (request .toString ().replace ("http://" , "ws://" ))
46
+ .execute (new WebSocketUpgradeHandler .Builder ()
47
+ .addWebSocketListener (new WebSocketListener () {
48
+ @ Override
49
+ public void onOpen (org .asynchttpclient .ws .WebSocket websocket ) {
50
+
51
+ }
52
+
53
+ @ Override
54
+ public void onClose (org .asynchttpclient .ws .WebSocket websocket , int code , String reason ) {
55
+ listener .onClose (code , reason );
56
+ }
57
+
58
+ @ Override
59
+ public void onError (Throwable t ) {
60
+ listener .onError (t );
61
+ }
62
+
63
+ @ Override
64
+ public void onTextFrame (String payload , boolean finalFragment , int rsv ) {
65
+ if (payload != null ) {
66
+ listener .onText (payload );
67
+ }
68
+ }
69
+ }).build ()).get ();
70
+ } catch (InterruptedException e ) {
71
+ e .printStackTrace ();
72
+ } catch (ExecutionException e ) {
73
+ e .printStackTrace ();
74
+ }
38
75
}
39
76
40
77
static BiFunction <HttpRequest , Listener , WebSocket > create (ClientConfig config ) {
@@ -53,19 +90,21 @@ static BiFunction<HttpRequest, Listener, WebSocket> create(ClientConfig config)
53
90
return (req , listener ) -> {
54
91
HttpRequest filtered = filterRequest .apply (req );
55
92
56
- return new NettyWebSocket (client , listener );
93
+ org .asynchttpclient .Request nettyReq = NettyMessages .toNettyRequest (config .baseUri (), filtered );
94
+
95
+ return new NettyWebSocket (client , nettyReq , listener );
57
96
};
58
97
}
59
98
60
99
@ Override
61
100
public WebSocket sendText (CharSequence data ) {
62
- // socket.send (data.toString());
101
+ socket .sendTextFrame (data .toString ());
63
102
return this ;
64
103
}
65
104
66
105
@ Override
67
106
public void close () throws UncheckedIOException {
68
- // socket.close (1000, "WebDriver closing socket");
107
+ socket .sendCloseFrame (1000 , "WebDriver closing socket" );
69
108
}
70
109
71
110
@ Override
0 commit comments