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

Commit 88f1333

Browse files
committed
Merge branch 'next'
2 parents 1973a1a + 8973ad3 commit 88f1333

File tree

11 files changed

+121
-138
lines changed

11 files changed

+121
-138
lines changed

docs/README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
<h6 align="center">Build Scalable Node.js WebSocket Applications</h6>
33

44
<p align="center">
5-
<img src="https://cdn.rawgit.com/goriunov/159120ca6a883d8d4e75543ec395d361/raw/f4c3c36ac1ab75beedcf73312272b60dac33ecfa/clusterws.svg" width="500">
5+
<img src="https://cdn.rawgit.com/goriunov/159120ca6a883d8d4e75543ec395d361/raw/146220360173a2428fceb44e7fc9b2cda8a17832/clusterws.svg" width="450">
66
</p>
77

88
<p align="center">
9-
<a title="JitPack Version" href="https://jitpack.io/#ClusterWS/ClusterWS-Client-Java"><img src="https://jitpack.io/v/ClusterWS/ClusterWS-Client-Java.svg"></a>
9+
<a href="https://github.com/ClusterWS/ClusterWS-Client-Java/blob/master/LICENSE"><img src="https://img.shields.io/github/license/ClusterWS/ClusterWS-Client-JS.svg?style=for-the-badge" alt="GitHub license" /></a>
10+
<a title="JitPack Version" href="https://jitpack.io/#ClusterWS/ClusterWS-Client-Java"><img src="https://img.shields.io/badge/JitPack-1.6.0-brightgreen.svg?longCache=true&style=for-the-badge"></a>
11+
<a href="https://github.com/ClusterWS/ClusterWS-Client-JS/graphs/commit-activity"><img src="https://img.shields.io/badge/Maintain-Yes-green.svg?style=for-the-badge" alt="Maintain" /></a>
1012
</p>
1113

1214
<p align="center">
@@ -15,5 +17,5 @@
1517

1618
<h1></h1>
1719
<h3 align="center">
18-
<a href="https://github.com/ClusterWS/ClusterWS-Client-Java/wiki"><strong>ClusterWS Java Client Documentation</strong></a>
20+
Find more about ClusterWS JavaScript Client in <a href="https://github.com/ClusterWS/ClusterWS-Client-Java/wiki"><strong>Wiki Documentation</strong></a>
1921
</h3>

src/main/java/com/clusterws/Channel.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.List;
44

55
public class Channel {
6-
public interface IChannelListener{
6+
public interface IChannelListener {
77
void onDataReceived(String channelName, Object data);
88
}
99

@@ -16,13 +16,13 @@ public Channel(String channelName, ClusterWS clusterWS) {
1616
mClusterWS = clusterWS;
1717
}
1818

19-
public Channel watch(IChannelListener listener){
19+
public Channel watch(IChannelListener listener) {
2020
mChannelListener = listener;
2121
return this;
2222
}
2323

24-
public Channel publish(Object data){
25-
mClusterWS.send(mChannelName,data,"publish");
24+
public Channel publish(Object data) {
25+
mClusterWS.send(mChannelName, data, "publish");
2626
return this;
2727
}
2828

@@ -42,7 +42,7 @@ void onMessage(Object data) {
4242
}
4343
}
4444

45-
void subscribe(){
46-
mClusterWS.send("subscribe",mChannelName,"system");
45+
void subscribe() {
46+
mClusterWS.send("subscribe", mChannelName, "system");
4747
}
4848
}

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
}

src/main/java/com/clusterws/Emitter.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,28 @@
33
import java.util.concurrent.ConcurrentHashMap;
44

55
class Emitter {
6-
private ConcurrentHashMap<String,IEmitterListener> mEvents;
6+
private ConcurrentHashMap<String, IEmitterListener> mEvents;
77

88
Emitter() {
99
mEvents = new ConcurrentHashMap<>();
1010
}
1111

12-
void addEventListener(String event, IEmitterListener listener){
13-
if (mEvents.containsKey(event)){
14-
mEvents.replace(event,listener);
12+
void addEventListener(String event, IEmitterListener listener) {
13+
if (mEvents.containsKey(event)) {
14+
mEvents.replace(event, listener);
1515
} else {
16-
mEvents.put(event,listener);
16+
mEvents.put(event, listener);
1717
}
1818
}
1919

20-
void emit(String event, Object object){
20+
void emit(String event, Object object) {
2121
IEmitterListener listener = mEvents.get(event);
22-
if (listener != null){
22+
if (listener != null) {
2323
listener.onDataReceived(object);
2424
}
2525
}
2626

27-
void removeAllEvents(){
27+
void removeAllEvents() {
2828
mEvents = new ConcurrentHashMap<>();
2929
}
3030
}

src/main/java/com/clusterws/IClusterWSListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
public interface IClusterWSListener {
44
void onConnected();
5+
56
void onError(Exception exception);
7+
68
void onDisconnected(int code, String reason);
79
}

src/main/java/com/clusterws/ISocketEvents.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44

55
public interface ISocketEvents {
66
void onOpen();
7+
78
void onError(Exception exception);
9+
810
void onClose(int code, String reason);
11+
912
void onBinaryMessage(ByteBuffer bytes);
13+
1014
void onMessage(String message);
1115

1216
}

src/main/java/com/clusterws/MessageHandler.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@
44
import com.alibaba.fastjson.JSONArray;
55
import com.alibaba.fastjson.JSONObject;
66

7-
import java.util.ArrayList;
87
import java.util.List;
98
import java.util.TimerTask;
109

1110

1211
class MessageHandler {
13-
String messageEncode(String event, Object data, String type){
12+
String messageEncode(String event, Object data, String type) {
1413
JSONObject jsonObject = new JSONObject();
1514
JSONArray jsonArray = new JSONArray();
16-
switch (type){
15+
switch (type) {
1716
case "publish":
1817
jsonArray.add("p");
1918
jsonArray.add(event);
@@ -27,18 +26,18 @@ String messageEncode(String event, Object data, String type){
2726
jsonObject.put("#", jsonArray);
2827
return jsonObject.toJSONString();
2928
case "system":
30-
switch (event){
29+
switch (event) {
3130
case "subscribe":
3231
jsonArray.add("s");
3332
jsonArray.add("s");
3433
jsonArray.add(data);
35-
jsonObject.put("#",jsonArray);
34+
jsonObject.put("#", jsonArray);
3635
return jsonObject.toJSONString();
3736
case "unsubscribe":
3837
jsonArray.add("s");
3938
jsonArray.add("u");
4039
jsonArray.add(data);
41-
jsonObject.put("#",jsonArray);
40+
jsonObject.put("#", jsonArray);
4241
return jsonObject.toJSONString();
4342
}
4443
case "ping":
@@ -48,9 +47,9 @@ String messageEncode(String event, Object data, String type){
4847
}
4948
}
5049

51-
void messageDecode(final ClusterWS socket, String message){
50+
void messageDecode(final ClusterWS socket, String message) {
5251
JSONArray jsonArray = JSON.parseObject(message).getJSONArray("#");
53-
switch (jsonArray.getString(0)){
52+
switch (jsonArray.getString(0)) {
5453
case "p":
5554
//
5655
List<Channel> channelArrayList = socket.getChannels();
@@ -64,10 +63,10 @@ void messageDecode(final ClusterWS socket, String message){
6463
}
6564
break;
6665
case "e":
67-
socket.getEmitter().emit(jsonArray.getString(1),jsonArray.get(2));
66+
socket.getEmitter().emit(jsonArray.getString(1), jsonArray.get(2));
6867
break;
6968
case "s":
70-
if (jsonArray.getString(1).equals("c")){
69+
if (jsonArray.getString(1).equals("c")) {
7170
socket.getPingHandler().getPingTimer().scheduleAtFixedRate(new TimerTask() {
7271
@Override
7372
public void run() {
@@ -78,10 +77,10 @@ public void run() {
7877
cancel();
7978
}
8079
}
81-
},0,jsonArray.getJSONObject(2).getInteger("ping"));
80+
}, 0, jsonArray.getJSONObject(2).getInteger("ping"));
8281
boolean useBinary = jsonArray.getJSONObject(2).getBoolean("binary");
8382
socket.setUseBinary(useBinary);
84-
if (socket.getClusterWSListener() != null){
83+
if (socket.getClusterWSListener() != null) {
8584
socket.getClusterWSListener().onConnected();
8685
}
8786
}

src/main/java/com/clusterws/PingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ void incrementMissedPing() {
1515
mMissedPing++;
1616
}
1717

18-
void setMissedPingToZero(){
18+
void setMissedPingToZero() {
1919
mMissedPing = 0;
2020
}
2121

0 commit comments

Comments
 (0)