Skip to content

Commit 913f48b

Browse files
committed
Added reconnect logic
1 parent 3603fd0 commit 913f48b

4 files changed

Lines changed: 51 additions & 17 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Step 2: Add dependency to pom.xml:
4646
<dependency>
4747
<groupId>com.github.CaliDog</groupId>
4848
<artifactId>certstream-java</artifactId>
49-
<version>0.2</version>
49+
<version>0.3</version>
5050
</dependency>
5151
```
5252

src/io/calidog/certstream/BoringParts.java

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package io.calidog.certstream;
22

3+
import org.java_websocket.client.WebSocketClient;
34
import org.java_websocket.handshake.ServerHandshake;
45
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
67

8+
import java.util.Arrays;
9+
import java.util.HashSet;
10+
import java.util.function.Supplier;
11+
712
/**
8-
* The class that takes care of ll the boring parts
13+
* The class that takes care of all the boring parts
914
* of talking over WebSockets, most notably the onClose
1015
* which will get called if your internet connection
1116
* hiccups.
@@ -15,15 +20,50 @@ public class BoringParts implements
1520
CertStreamCloseHandler,
1621
CertStreamOpenHandler {
1722
private static final Logger logger = LoggerFactory.getLogger(BoringParts.class);
18-
private boolean notClosed = true;
23+
private final long sleepBeforeReconnect;
24+
25+
private HashSet<Integer> recoverableCloseCodes = new HashSet<>(Arrays.asList(1001, 1005, 1006, 1009));
26+
27+
private final Supplier<WebSocketClient> webSocketClientSupplier;
28+
private WebSocketClient webSocketClient;
29+
30+
private final CertStreamClientImplFactory defaultImplFactory =
31+
new CertStreamClientImplFactory(this,
32+
this,
33+
this);
34+
35+
public BoringParts(CertStreamStringMessageHandler handler)
36+
{
37+
this(handler, 0);
38+
}
39+
40+
public BoringParts(CertStreamStringMessageHandler messageHandler, long sleepBeforeReconnect) {
41+
this.sleepBeforeReconnect = sleepBeforeReconnect;
42+
this.webSocketClientSupplier = () -> defaultImplFactory.make(messageHandler);
43+
webSocketClient = webSocketClientSupplier.get();
44+
}
1945

2046
//todo reconnection logic
2147
@Override
2248
public void onClose(int i, String s, boolean b) {
2349
logger.warn("OnClose was called wih i = " + i + ", s = "+s + ", b = b");
2450
System.out.println("OnClose was called wih i = " + i + ", s = "+s + ", b = b");
2551

26-
notClosed = false;
52+
if (recoverableCloseCodes.contains(i))
53+
{
54+
if (sleepBeforeReconnect >= 0)
55+
{
56+
try {
57+
Thread.yield();
58+
Thread.sleep(sleepBeforeReconnect);
59+
} catch (InterruptedException e) {
60+
logger.info("Thread sleep interrupted, weird, exiting", e);
61+
return;
62+
}
63+
}
64+
65+
webSocketClient = webSocketClientSupplier.get();
66+
}
2767
}
2868

2969
@Override
@@ -51,6 +91,6 @@ public void onOpen(ServerHandshake serverHandshake) {
5191
* @return whether or not onClose has been called
5292
*/
5393
public boolean isNotClosed() {
54-
return notClosed;
94+
return !webSocketClient.isClosed();
5595
}
5696
}

src/io/calidog/certstream/CertStream.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,6 @@ public class CertStream{
1515

1616
private static final Logger logger = LoggerFactory.getLogger(CertStream.class);
1717

18-
private static BoringParts theBoringParts = new BoringParts();
19-
20-
private static CertStreamClientImplFactory defaultImplFactory =
21-
new CertStreamClientImplFactory(theBoringParts,
22-
theBoringParts,
23-
theBoringParts);
24-
2518
/**
2619
* @param handler A {@link Consumer<String>} that we'll
2720
* run in a Thread that stays alive as long
@@ -31,14 +24,17 @@ public static void onMessageString(Consumer<String> handler)
3124
{
3225
new Thread(() ->
3326
{
34-
defaultImplFactory.make(handler::accept);
27+
BoringParts theBoringParts = new BoringParts(handler::accept);
3528

3629
while (theBoringParts.isNotClosed())
3730
{
3831
Thread.yield();
3932
try {
40-
Thread.sleep(3000);
41-
} catch (InterruptedException e) {
33+
Thread.sleep(1000);
34+
} catch (InterruptedException e) {}
35+
36+
if (Thread.interrupted())
37+
{
4238
break;
4339
}
4440
}

src/io/calidog/certstream/CertStreamClientImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@
77
import java.net.URISyntaxException;
88

99
public class CertStreamClientImpl extends WebSocketClient{
10-
1110
private static final String certStreamUriString = "wss://certstream.calidog.io";
1211

1312
private static URI tempUri = null;
14-
1513
static {
1614
try
1715
{

0 commit comments

Comments
 (0)