From af92242c7aa013898a078197a013cc52bc8c3a7a Mon Sep 17 00:00:00 2001
From: theo-s68 <194042188+theo-s68@users.noreply.github.com>
Date: Thu, 23 Oct 2025 15:33:50 +0700
Subject: [PATCH] Add method to common to stop websocket client
---
clients/common/pom.xml | 2 +-
.../adapter/ConnectionInterface.java | 2 ++
.../websocket/adapter/ConnectionWrapper.java | 19 +++++++++++++++++--
.../adapter/PoolConnectionWrapper.java | 8 ++++++++
.../stream/StreamConnectionInterface.java | 2 ++
.../stream/StreamConnectionPoolWrapper.java | 8 ++++++++
.../stream/StreamConnectionWrapper.java | 2 +-
.../docs/rest-api/migration-guide.md | 2 +-
.../derivatives-trading-coin-futures/pom.xml | 4 ++--
.../docs/rest-api/migration-guide.md | 2 +-
clients/derivatives-trading-options/pom.xml | 4 ++--
.../docs/rest-api/migration-guide.md | 2 +-
.../pom.xml | 4 ++--
.../docs/rest-api/migration-guide.md | 2 +-
.../pom.xml | 4 ++--
.../docs/rest-api/migration-guide.md | 2 +-
.../derivatives-trading-usds-futures/pom.xml | 4 ++--
clients/spot/docs/rest-api/migration-guide.md | 2 +-
clients/spot/pom.xml | 4 ++--
19 files changed, 57 insertions(+), 22 deletions(-)
diff --git a/clients/common/pom.xml b/clients/common/pom.xml
index 09bbcf28..f6f245aa 100644
--- a/clients/common/pom.xml
+++ b/clients/common/pom.xml
@@ -10,6 +10,6 @@
binance-common
common
- 2.1.1
+ 2.2.1
jar
\ No newline at end of file
diff --git a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionInterface.java b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionInterface.java
index c78da39a..d25befb2 100644
--- a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionInterface.java
+++ b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionInterface.java
@@ -24,4 +24,6 @@ public interface ConnectionInterface {
void setLogonMethods(List logonMethods);
void setLogoutMethods(List logoutMethods);
+
+ void stop() throws Exception;
}
diff --git a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionWrapper.java b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionWrapper.java
index 60091145..633dee54 100644
--- a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionWrapper.java
+++ b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/ConnectionWrapper.java
@@ -49,6 +49,7 @@
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.http.HttpField;
import org.eclipse.jetty.http.HttpHeader;
+import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.StatusCode;
import org.eclipse.jetty.websocket.api.WebSocketListener;
@@ -92,6 +93,8 @@ public class ConnectionWrapper implements WebSocketListener, ConnectionInterface
private List> streamQueues = new ArrayList<>();
+ private Timer timer;
+
public ConnectionWrapper(WebSocketClientConfiguration configuration, Gson gson) {
this(configuration, null, gson);
}
@@ -160,8 +163,8 @@ public ConnectionWrapper(
}
Integer reconnectAfter = configuration.getReconnectIntervalTime();
- new Timer()
- .scheduleAtFixedRate(
+ this.timer = new Timer();
+ this.timer.scheduleAtFixedRate(
new TimerTask() {
@Override
public void run() {
@@ -221,6 +224,7 @@ public void connect(Consumer customCallback)
CompletableFuture clientSessionPromise =
webSocketClient.connect(this, serverURI, clientUpgradeRequest);
Session session = clientSessionPromise.join();
+
if (callback != null) {
callback.accept(session);
}
@@ -501,6 +505,7 @@ protected void afterConnect(Session session) {
if (this.oldSession != null) {
this.oldSession.close(StatusCode.NORMAL, "close after reconnect", WriteCallback.NOOP);
}
+ canReconnect = true;
setReady(true);
}
@@ -548,7 +553,17 @@ public URI getUri(String uri) throws URISyntaxException {
public void disconnect() {
if (this.session != null) {
this.session.disconnect();
+ }
+ setReady(false);
+ canReconnect = false;
+ }
+
+ public void stop() throws Exception {
+ if (this.webSocketClient != null) {
setReady(false);
+ canReconnect = false;
+ timer.cancel();
+ webSocketClient.stop();
}
}
}
diff --git a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/PoolConnectionWrapper.java b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/PoolConnectionWrapper.java
index 3ce9aa86..8905ae81 100644
--- a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/PoolConnectionWrapper.java
+++ b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/PoolConnectionWrapper.java
@@ -147,4 +147,12 @@ public void setLogoutMethods(List logoutMethods) {
public boolean isConnected() {
return isConnected;
}
+
+ @Override
+ public void stop() throws Exception {
+ for (ConnectionWrapper connectionWrapper : connectionList) {
+ connectionWrapper.stop();
+ }
+ isConnected = false;
+ }
}
diff --git a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionInterface.java b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionInterface.java
index b87bc7fd..797f6e67 100644
--- a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionInterface.java
+++ b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionInterface.java
@@ -21,4 +21,6 @@ Map> subscribe(
boolean isConnected();
void setUserAgent(String userAgent);
+
+ void stop() throws Exception;
}
diff --git a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionPoolWrapper.java b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionPoolWrapper.java
index 432ca77f..7e765bf5 100644
--- a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionPoolWrapper.java
+++ b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionPoolWrapper.java
@@ -154,4 +154,12 @@ public void setUserAgent(String userAgent) {
public boolean isConnected() {
return isConnected;
}
+
+ @Override
+ public void stop() throws Exception {
+ for (ConnectionWrapper connectionWrapper : connectionList) {
+ connectionWrapper.stop();
+ }
+ isConnected = false;
+ }
}
diff --git a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionWrapper.java b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionWrapper.java
index dcfdaf4d..1fc647fa 100644
--- a/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionWrapper.java
+++ b/clients/common/src/main/java/com/binance/connector/client/common/websocket/adapter/stream/StreamConnectionWrapper.java
@@ -129,7 +129,7 @@ public void onWebSocketText(String message) {
protected void beforeConnect() {
// no session, so this is not a reconnect
- if (this.session == null) {
+ if (this.session == null || !this.session.isOpen()) {
return;
}
RequestWrapperDTO