Skip to content

Commit 7b32ff5

Browse files
committed
fix blocking issue
1 parent ceee847 commit 7b32ff5

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
<modelVersion>4.0.0</modelVersion>
1212
<artifactId>websocket-client</artifactId>
13-
<version>1.0.6</version>
13+
<version>1.0.7</version>
1414
<name>WebsocketClient</name>
1515
<packaging>jar</packaging>
1616

src/main/java/info/unterrainer/websocketclient/WebsocketConnection.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import java.io.IOException;
44
import java.net.URI;
5+
import java.time.Duration;
56
import java.util.List;
67
import java.util.Map;
78
import java.util.concurrent.CompletableFuture;
9+
import java.util.concurrent.TimeUnit;
810
import java.util.function.Consumer;
911

1012
import org.glassfish.tyrus.client.ClientManager;
@@ -46,16 +48,20 @@ public class WebsocketConnection implements AutoCloseable {
4648

4749
final CompletableFuture<Session> sessionReady = new CompletableFuture<>();
4850

49-
public Session awaitOpen() {
51+
public Session awaitOpen(Duration timeoutInMillis) {
5052
try {
51-
return sessionReady.get();
53+
if (timeoutInMillis == null) {
54+
// Blocks indefinitely until the session is ready.
55+
return sessionReady.get();
56+
}
57+
return sessionReady.get(timeoutInMillis.toMillis(), TimeUnit.MILLISECONDS);
5258
} catch (Exception e) {
5359
throw new IllegalStateException("WebSocket did not open in time.", e);
5460
}
5561
}
5662

5763
public void send(String message) {
58-
Session s = awaitOpen();
64+
Session s = awaitOpen(Duration.ofMillis(5000L));
5965
try {
6066
s.getBasicRemote().sendText(message);
6167
} catch (Exception e) {
@@ -67,7 +73,7 @@ public void send(String message) {
6773

6874
@Override
6975
public void close() {
70-
Session s = awaitOpen();
76+
Session s = awaitOpen(Duration.ofMillis(5000L));
7177
try {
7278
s.close(new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE, "Normal closure"));
7379
} catch (IOException e) {

src/main/java/info/unterrainer/websocketclient/WebsocketEndpoints.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package info.unterrainer.websocketclient;
22

3+
import java.time.Duration;
4+
35
import jakarta.websocket.CloseReason;
46
import jakarta.websocket.Endpoint;
57
import jakarta.websocket.EndpointConfig;
@@ -32,7 +34,7 @@ public void onOpen(Session session, EndpointConfig config) {
3234
// onMessage-Handler
3335
session.addMessageHandler(String.class, message -> {
3436
log.debug("Received message: " + message);
35-
client.awaitOpen();
37+
client.awaitOpen(Duration.ofMillis(5000L));
3638
if (client.onMessageHandler != null) {
3739
try {
3840
client.onMessageHandler.accept(message);
@@ -45,7 +47,7 @@ public void onOpen(Session session, EndpointConfig config) {
4547

4648
@Override
4749
public void onClose(Session session, CloseReason closeReason) {
48-
Session s = client.awaitOpen();
50+
Session s = client.awaitOpen(Duration.ofMillis(5000L));
4951
log.info("Disconnected from server: {}", closeReason);
5052
if (client.onCloseHandler != null) {
5153
try {
@@ -64,7 +66,7 @@ public void onClose(Session session, CloseReason closeReason) {
6466

6567
@Override
6668
public void onError(Session session, Throwable throwable) {
67-
client.awaitOpen();
69+
client.awaitOpen(Duration.ofMillis(5000L));
6870
log.error("Error occurred: ", throwable);
6971
if (client.onErrorHandler != null) {
7072
try {

0 commit comments

Comments
 (0)