3
3
import com .neovisionaries .ws .client .*;
4
4
5
5
import java .io .IOException ;
6
+ import java .nio .charset .StandardCharsets ;
6
7
import java .util .ArrayList ;
7
8
import java .util .List ;
8
9
import java .util .Map ;
@@ -20,10 +21,11 @@ public class ClusterWS {
20
21
private Emitter mEmitter ;
21
22
private ArrayList <Channel > mChannels ;
22
23
private Message mMessageHandler ;
24
+ private boolean mUseBinary ;
23
25
24
26
//Ping
25
27
private Timer mPingTimer ;
26
- private int mLost ;
28
+ private int mMissedPing ;
27
29
28
30
private Reconnection mReconnectionHandler ;
29
31
@@ -33,6 +35,7 @@ public ClusterWS(String url, String port) {
33
35
mChannels = new ArrayList <>();
34
36
mMessageHandler = new Message ();
35
37
mReconnectionHandler = new Reconnection (null , null , null , null , this );
38
+ mUseBinary = false ;
36
39
create ();
37
40
}
38
41
@@ -44,9 +47,7 @@ private void create() {
44
47
@ Override
45
48
public void onConnected (WebSocket websocket , Map <String , List <String >> headers ) throws Exception {
46
49
mReconnectionHandler .onConnected ();
47
- if (mClusterWSListener != null ) {
48
- mClusterWSListener .onConnected (ClusterWS .this );
49
- }
50
+ mPingTimer = new Timer ();
50
51
}
51
52
52
53
@ Override
@@ -63,16 +64,28 @@ public void onConnectError(WebSocket websocket, WebSocketException exception) th
63
64
@ Override
64
65
public void onTextMessage (WebSocket websocket , String text ) throws Exception {
65
66
if (text .equals ("#0" )) {
66
- mLost = 0 ;
67
+ mMissedPing = 0 ;
67
68
send ("#1" , null , "ping" );
68
69
} else {
69
70
mMessageHandler .messageDecode (ClusterWS .this , text );
70
71
}
71
72
}
72
73
74
+ @ Override
75
+ public void onBinaryMessage (WebSocket websocket , byte [] binary ) throws Exception {
76
+ String message = new String (binary , StandardCharsets .UTF_8 );
77
+ System .out .println (message );
78
+ if (message .equals ("#0" )) {
79
+ mMissedPing = 0 ;
80
+ send ("#1" , null , "ping" );
81
+ } else {
82
+ mMessageHandler .messageDecode (ClusterWS .this , message );
83
+ }
84
+ }
85
+
73
86
@ Override
74
87
public void onDisconnected (WebSocket websocket , WebSocketFrame serverCloseFrame , WebSocketFrame clientCloseFrame , boolean closedByServer ) throws Exception {
75
- mLost = 0 ;
88
+ mMissedPing = 0 ;
76
89
if (mPingTimer != null ) {
77
90
mPingTimer .cancel ();
78
91
mPingTimer = new Timer ();
@@ -98,6 +111,7 @@ public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame,
98
111
}
99
112
}
100
113
114
+
101
115
});
102
116
103
117
} catch (IOException e ) {
@@ -141,7 +155,12 @@ public void on(String event, EmitterListener listener) {
141
155
}
142
156
143
157
public void send (String event , Object data ) {
144
- mWebSocket .sendText (mMessageHandler .messageEncode (event , data , "emit" ));
158
+ System .out .println (mUseBinary );
159
+ if (mUseBinary ){
160
+ mWebSocket .sendBinary (mMessageHandler .messageEncode (event , data , "emit" ).getBytes ());
161
+ } else {
162
+ mWebSocket .sendText (mMessageHandler .messageEncode (event , data , "emit" ));
163
+ }
145
164
}
146
165
147
166
public Channel subscribe (String channelName ) {
@@ -194,15 +213,23 @@ Timer getPingTimer() {
194
213
return mPingTimer ;
195
214
}
196
215
197
- int getLost () {
198
- return mLost ;
216
+ int getMissedPing () {
217
+ return mMissedPing ;
199
218
}
200
219
201
220
void incrementLost () {
202
- mLost ++;
221
+ mMissedPing ++;
203
222
}
204
223
205
224
boolean isConnectedAsynchronously () {
206
225
return mIsConnectedAsynchronously ;
207
226
}
227
+
228
+ void setUseBinary (boolean useBinary ) {
229
+ mUseBinary = useBinary ;
230
+ }
231
+
232
+ public ClusterWSListener getClusterWSListener () {
233
+ return mClusterWSListener ;
234
+ }
208
235
}
0 commit comments