Skip to content

Commit

Permalink
Added reconnect logic
Browse files Browse the repository at this point in the history
  • Loading branch information
joshbooks committed Nov 28, 2017
1 parent 3603fd0 commit 913f48b
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 17 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Step 2: Add dependency to pom.xml:
<dependency>
<groupId>com.github.CaliDog</groupId>
<artifactId>certstream-java</artifactId>
<version>0.2</version>
<version>0.3</version>
</dependency>
```

Expand Down
48 changes: 44 additions & 4 deletions src/io/calidog/certstream/BoringParts.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package io.calidog.certstream;

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.HashSet;
import java.util.function.Supplier;

/**
* The class that takes care of ll the boring parts
* The class that takes care of all the boring parts
* of talking over WebSockets, most notably the onClose
* which will get called if your internet connection
* hiccups.
Expand All @@ -15,15 +20,50 @@ public class BoringParts implements
CertStreamCloseHandler,
CertStreamOpenHandler {
private static final Logger logger = LoggerFactory.getLogger(BoringParts.class);
private boolean notClosed = true;
private final long sleepBeforeReconnect;

private HashSet<Integer> recoverableCloseCodes = new HashSet<>(Arrays.asList(1001, 1005, 1006, 1009));

private final Supplier<WebSocketClient> webSocketClientSupplier;
private WebSocketClient webSocketClient;

private final CertStreamClientImplFactory defaultImplFactory =
new CertStreamClientImplFactory(this,
this,
this);

public BoringParts(CertStreamStringMessageHandler handler)
{
this(handler, 0);
}

public BoringParts(CertStreamStringMessageHandler messageHandler, long sleepBeforeReconnect) {
this.sleepBeforeReconnect = sleepBeforeReconnect;
this.webSocketClientSupplier = () -> defaultImplFactory.make(messageHandler);
webSocketClient = webSocketClientSupplier.get();
}

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

notClosed = false;
if (recoverableCloseCodes.contains(i))
{
if (sleepBeforeReconnect >= 0)
{
try {
Thread.yield();
Thread.sleep(sleepBeforeReconnect);
} catch (InterruptedException e) {
logger.info("Thread sleep interrupted, weird, exiting", e);
return;
}
}

webSocketClient = webSocketClientSupplier.get();
}
}

@Override
Expand Down Expand Up @@ -51,6 +91,6 @@ public void onOpen(ServerHandshake serverHandshake) {
* @return whether or not onClose has been called
*/
public boolean isNotClosed() {
return notClosed;
return !webSocketClient.isClosed();
}
}
16 changes: 6 additions & 10 deletions src/io/calidog/certstream/CertStream.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,6 @@ public class CertStream{

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

private static BoringParts theBoringParts = new BoringParts();

private static CertStreamClientImplFactory defaultImplFactory =
new CertStreamClientImplFactory(theBoringParts,
theBoringParts,
theBoringParts);

/**
* @param handler A {@link Consumer<String>} that we'll
* run in a Thread that stays alive as long
Expand All @@ -31,14 +24,17 @@ public static void onMessageString(Consumer<String> handler)
{
new Thread(() ->
{
defaultImplFactory.make(handler::accept);
BoringParts theBoringParts = new BoringParts(handler::accept);

while (theBoringParts.isNotClosed())
{
Thread.yield();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Thread.sleep(1000);
} catch (InterruptedException e) {}

if (Thread.interrupted())
{
break;
}
}
Expand Down
2 changes: 0 additions & 2 deletions src/io/calidog/certstream/CertStreamClientImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@
import java.net.URISyntaxException;

public class CertStreamClientImpl extends WebSocketClient{

private static final String certStreamUriString = "wss://certstream.calidog.io";

private static URI tempUri = null;

static {
try
{
Expand Down

0 comments on commit 913f48b

Please sign in to comment.