Skip to content
This repository was archived by the owner on Nov 2, 2020. It is now read-only.

Commit 6cb48ec

Browse files
committed
Remade reconnection in ClusterWS
1 parent 883ab73 commit 6cb48ec

File tree

1 file changed

+35
-18
lines changed

1 file changed

+35
-18
lines changed

src/main/java/com/clusterws/ClusterWS.java

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import java.nio.charset.StandardCharsets;
88
import java.util.ArrayList;
99
import java.util.List;
10+
import java.util.Timer;
11+
import java.util.TimerTask;
12+
import java.util.concurrent.ThreadLocalRandom;
1013

1114
public class ClusterWS {
1215
private Socket mSocket;
@@ -17,20 +20,30 @@ public class ClusterWS {
1720
private MessageHandler mMessageHandler;
1821
private PingHandler mPingHandler;
1922
private List<Channel> mChannels;
20-
private ReconnectionHandler mReconnectionHandler;
23+
private ReconnectionParams mReconnectionParams;
2124

2225
public ClusterWS(String url) {
23-
if (url == null){
26+
if (url == null) {
2427
throw new NullPointerException("Url must be provided");
2528
}
2629
mUrl = url;
2730
mChannels = new ArrayList<>();
28-
mReconnectionHandler = new ReconnectionHandler(null, null, null, null, this);
31+
mReconnectionParams = new ReconnectionParams(
32+
false,
33+
null,
34+
null,
35+
null);
2936
createSocket();
3037
}
3138

32-
public ClusterWS setReconnection(Boolean autoReconnect, Integer reconnectionIntervalMin, Integer reconnectionIntervalMax, Integer reconnectionAttempts) {
33-
mReconnectionHandler = new ReconnectionHandler(autoReconnect, reconnectionIntervalMin, reconnectionIntervalMax, reconnectionAttempts, this);
39+
public ClusterWS setReconnection(Boolean autoReconnect,
40+
Integer reconnectionIntervalMin,
41+
Integer reconnectionIntervalMax,
42+
Integer reconnectionAttempts) {
43+
mReconnectionParams = new ReconnectionParams(autoReconnect,
44+
reconnectionIntervalMin,
45+
reconnectionIntervalMax,
46+
reconnectionAttempts);
3447
return this;
3548
}
3649

@@ -53,7 +66,7 @@ public void on(String event, IEmitterListener listener) {
5366
}
5467

5568
public void send(String event, Object data) {
56-
send(event,data,"emit");
69+
send(event, data, "emit");
5770
}
5871

5972
public WebSocket.READYSTATE getState() {
@@ -117,7 +130,7 @@ private void createSocket() {
117130
mSocket = new Socket(URI.create(mUrl), new ISocketEvents() {
118131
@Override
119132
public void onOpen() {
120-
mReconnectionHandler.onOpen();
133+
mClusterWSListener.onConnected();
121134
}
122135

123136
@Override
@@ -132,17 +145,22 @@ public void onClose(int code, String reason) {
132145
if (mPingHandler.getPingTimer() != null) {
133146
mPingHandler.getPingTimer().cancel();
134147
}
135-
136-
if (mReconnectionHandler.isInReconnectionState()) {
137-
return;
138-
}
139-
if (mReconnectionHandler.isAutoReconnect() && code != 1000) {
140-
mReconnectionHandler.reconnect();
141-
}
142-
143-
if (mClusterWSListener != null) {
144-
mClusterWSListener.onDisconnected(code, reason);
148+
if (mReconnectionParams.isAutoReconnect() && code != 1000 && (mReconnectionParams.getReconnectionAttempts() == 0 || mReconnectionParams.getReconnectionsAttempted() < mReconnectionParams.getReconnectionAttempts())) {
149+
if (mSocket.getReadyState() == WebSocket.READYSTATE.CLOSED || mSocket.getReadyState() == WebSocket.READYSTATE.NOT_YET_CONNECTED) {
150+
mReconnectionParams.incrementReconnectionsAttempted();
151+
int randomDelay = ThreadLocalRandom.current().nextInt(1,
152+
mReconnectionParams.getReconnectionIntervalMax() -
153+
mReconnectionParams.getReconnectionIntervalMin() +
154+
1);
155+
new Timer().schedule(new TimerTask() {
156+
@Override
157+
public void run() {
158+
connect();
159+
}
160+
}, randomDelay);
161+
}
145162
}
163+
mClusterWSListener.onDisconnected(code, reason);
146164
}
147165

148166
@Override
@@ -170,5 +188,4 @@ private void onMessageReceived(String message) {
170188
mMessageHandler.messageDecode(ClusterWS.this, message);
171189
}
172190
}
173-
174191
}

0 commit comments

Comments
 (0)