From 98d67cb5057c1c05efa9582ffae9413edf4774fd Mon Sep 17 00:00:00 2001 From: Artur Gawron Date: Wed, 29 Mar 2023 22:57:12 +0200 Subject: [PATCH 1/3] Add pinInterval option to websocket client --- .../client/impl/CMWebsocketClientImpl.java | 12 ++++++++--- .../client/impl/UMWebsocketClientImpl.java | 12 ++++++++--- .../client/impl/WebsocketClientImpl.java | 21 +++++++++---------- .../client/utils/WebSocketConnection.java | 19 ++++++++++------- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java index 05b234f..fea765d 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java @@ -1,11 +1,13 @@ package com.binance.connector.futures.client.impl; import com.binance.connector.futures.client.enums.DefaultUrls; +import com.binance.connector.futures.client.utils.ParameterChecker; import com.binance.connector.futures.client.utils.RequestBuilder; import com.binance.connector.futures.client.utils.WebSocketCallback; -import com.binance.connector.futures.client.utils.ParameterChecker; import okhttp3.Request; +import java.time.Duration; + /** *

COIN-M Websocket Streams

* All stream endpoints under the @@ -17,11 +19,15 @@ */ public class CMWebsocketClientImpl extends WebsocketClientImpl { public CMWebsocketClientImpl() { - super(DefaultUrls.COINM_WS_URL); + super(DefaultUrls.COINM_WS_URL, Duration.ZERO); } public CMWebsocketClientImpl(String baseUrl) { - super(baseUrl); + super(baseUrl, Duration.ZERO); + } + + public CMWebsocketClientImpl(String baseUrl, Duration pingInterval) { + super(baseUrl, pingInterval); } /** diff --git a/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java index bce6091..2799707 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java @@ -1,11 +1,13 @@ package com.binance.connector.futures.client.impl; import com.binance.connector.futures.client.enums.DefaultUrls; +import com.binance.connector.futures.client.utils.ParameterChecker; import com.binance.connector.futures.client.utils.RequestBuilder; import com.binance.connector.futures.client.utils.WebSocketCallback; -import com.binance.connector.futures.client.utils.ParameterChecker; import okhttp3.Request; +import java.time.Duration; + /** *

USDⓈ-M Websocket Streams

* All stream endpoints under the @@ -18,11 +20,15 @@ public class UMWebsocketClientImpl extends WebsocketClientImpl { public UMWebsocketClientImpl() { - super(DefaultUrls.USDM_WS_URL); + super(DefaultUrls.USDM_WS_URL, Duration.ZERO); } public UMWebsocketClientImpl(String baseUrl) { - super(baseUrl); + super(baseUrl, Duration.ZERO); + } + + public UMWebsocketClientImpl(String baseUrl, Duration pingInterval) { + super(baseUrl, pingInterval); } /** diff --git a/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java index 513aa69..398fc70 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java @@ -1,19 +1,16 @@ package com.binance.connector.futures.client.impl; import com.binance.connector.futures.client.WebsocketClient; -import com.binance.connector.futures.client.utils.HttpClientSingleton; -import com.binance.connector.futures.client.utils.RequestBuilder; -import com.binance.connector.futures.client.utils.UrlBuilder; -import com.binance.connector.futures.client.utils.WebSocketCallback; -import com.binance.connector.futures.client.utils.WebSocketConnection; -import com.binance.connector.futures.client.utils.ParameterChecker; +import com.binance.connector.futures.client.utils.*; +import okhttp3.Request; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Duration; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import okhttp3.Request; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** *

Futures Websocket Streams

@@ -28,13 +25,15 @@ */ public abstract class WebsocketClientImpl implements WebsocketClient { private final String baseUrl; + private final Duration pingInterval; private final Map connections = new HashMap<>(); private final WebSocketCallback noopCallback = msg -> { }; private static final Logger logger = LoggerFactory.getLogger(WebsocketClientImpl.class); - public WebsocketClientImpl(String baseUrl) { + public WebsocketClientImpl(String baseUrl, Duration pingInterval) { this.baseUrl = baseUrl; + this.pingInterval = pingInterval; } public WebSocketCallback getNoopCallback() { @@ -715,7 +714,7 @@ public int createConnection( WebSocketCallback onFailureCallback, Request request ) { - WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onFailureCallback, request); + WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onFailureCallback, request, this.pingInterval); connection.connect(); int connectionId = connection.getConnectionId(); connections.put(connectionId, connection); diff --git a/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java b/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java index 4994b73..fa7ec8f 100644 --- a/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java +++ b/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java @@ -1,18 +1,15 @@ package com.binance.connector.futures.client.utils; -import java.util.concurrent.atomic.AtomicInteger; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.WebSocket; -import okhttp3.WebSocketListener; +import okhttp3.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.time.Duration; +import java.util.concurrent.atomic.AtomicInteger; + public class WebSocketConnection extends WebSocketListener { private static final AtomicInteger connectionCounter = new AtomicInteger(0); private static final int NORMAL_CLOSURE_STATUS = 1000; - private static final OkHttpClient client = HttpClientSingleton.getHttpClient(); private static final Logger logger = LoggerFactory.getLogger(WebSocketConnection.class); private final WebSocketCallback onOpenCallback; @@ -23,6 +20,7 @@ public class WebSocketConnection extends WebSocketListener { private final Request request; private final String streamName; + private final OkHttpClient client; private WebSocket webSocket; private final Object mutex; @@ -32,7 +30,8 @@ public WebSocketConnection( WebSocketCallback onMessageCallback, WebSocketCallback onClosingCallback, WebSocketCallback onFailureCallback, - Request request + Request request, + Duration pingInterval ) { this.onOpenCallback = onOpenCallback; this.onMessageCallback = onMessageCallback; @@ -43,6 +42,10 @@ public WebSocketConnection( this.streamName = request.url().host() + request.url().encodedPath(); this.webSocket = null; this.mutex = new Object(); + + OkHttpClient.Builder builder = HttpClientSingleton.getHttpClient().newBuilder(); + builder.pingInterval(pingInterval); + this.client = builder.build(); } public void connect() { From e8bca3be47a0c6ce39834cb961572316d1225037 Mon Sep 17 00:00:00 2001 From: Artur Gawron Date: Wed, 29 Mar 2023 23:01:01 +0200 Subject: [PATCH 2/3] Revert "Add pinInterval option to websocket client" This reverts commit 98d67cb5057c1c05efa9582ffae9413edf4774fd. --- .../client/impl/CMWebsocketClientImpl.java | 12 +++-------- .../client/impl/UMWebsocketClientImpl.java | 12 +++-------- .../client/impl/WebsocketClientImpl.java | 21 ++++++++++--------- .../client/utils/WebSocketConnection.java | 19 +++++++---------- 4 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java index fea765d..05b234f 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java @@ -1,13 +1,11 @@ package com.binance.connector.futures.client.impl; import com.binance.connector.futures.client.enums.DefaultUrls; -import com.binance.connector.futures.client.utils.ParameterChecker; import com.binance.connector.futures.client.utils.RequestBuilder; import com.binance.connector.futures.client.utils.WebSocketCallback; +import com.binance.connector.futures.client.utils.ParameterChecker; import okhttp3.Request; -import java.time.Duration; - /** *

COIN-M Websocket Streams

* All stream endpoints under the @@ -19,15 +17,11 @@ */ public class CMWebsocketClientImpl extends WebsocketClientImpl { public CMWebsocketClientImpl() { - super(DefaultUrls.COINM_WS_URL, Duration.ZERO); + super(DefaultUrls.COINM_WS_URL); } public CMWebsocketClientImpl(String baseUrl) { - super(baseUrl, Duration.ZERO); - } - - public CMWebsocketClientImpl(String baseUrl, Duration pingInterval) { - super(baseUrl, pingInterval); + super(baseUrl); } /** diff --git a/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java index 2799707..bce6091 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java @@ -1,13 +1,11 @@ package com.binance.connector.futures.client.impl; import com.binance.connector.futures.client.enums.DefaultUrls; -import com.binance.connector.futures.client.utils.ParameterChecker; import com.binance.connector.futures.client.utils.RequestBuilder; import com.binance.connector.futures.client.utils.WebSocketCallback; +import com.binance.connector.futures.client.utils.ParameterChecker; import okhttp3.Request; -import java.time.Duration; - /** *

USDⓈ-M Websocket Streams

* All stream endpoints under the @@ -20,15 +18,11 @@ public class UMWebsocketClientImpl extends WebsocketClientImpl { public UMWebsocketClientImpl() { - super(DefaultUrls.USDM_WS_URL, Duration.ZERO); + super(DefaultUrls.USDM_WS_URL); } public UMWebsocketClientImpl(String baseUrl) { - super(baseUrl, Duration.ZERO); - } - - public UMWebsocketClientImpl(String baseUrl, Duration pingInterval) { - super(baseUrl, pingInterval); + super(baseUrl); } /** diff --git a/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java index 398fc70..513aa69 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java @@ -1,16 +1,19 @@ package com.binance.connector.futures.client.impl; import com.binance.connector.futures.client.WebsocketClient; -import com.binance.connector.futures.client.utils.*; -import okhttp3.Request; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.time.Duration; +import com.binance.connector.futures.client.utils.HttpClientSingleton; +import com.binance.connector.futures.client.utils.RequestBuilder; +import com.binance.connector.futures.client.utils.UrlBuilder; +import com.binance.connector.futures.client.utils.WebSocketCallback; +import com.binance.connector.futures.client.utils.WebSocketConnection; +import com.binance.connector.futures.client.utils.ParameterChecker; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import okhttp3.Request; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** *

Futures Websocket Streams

@@ -25,15 +28,13 @@ */ public abstract class WebsocketClientImpl implements WebsocketClient { private final String baseUrl; - private final Duration pingInterval; private final Map connections = new HashMap<>(); private final WebSocketCallback noopCallback = msg -> { }; private static final Logger logger = LoggerFactory.getLogger(WebsocketClientImpl.class); - public WebsocketClientImpl(String baseUrl, Duration pingInterval) { + public WebsocketClientImpl(String baseUrl) { this.baseUrl = baseUrl; - this.pingInterval = pingInterval; } public WebSocketCallback getNoopCallback() { @@ -714,7 +715,7 @@ public int createConnection( WebSocketCallback onFailureCallback, Request request ) { - WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onFailureCallback, request, this.pingInterval); + WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onFailureCallback, request); connection.connect(); int connectionId = connection.getConnectionId(); connections.put(connectionId, connection); diff --git a/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java b/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java index fa7ec8f..4994b73 100644 --- a/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java +++ b/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java @@ -1,15 +1,18 @@ package com.binance.connector.futures.client.utils; -import okhttp3.*; +import java.util.concurrent.atomic.AtomicInteger; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.WebSocket; +import okhttp3.WebSocketListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.time.Duration; -import java.util.concurrent.atomic.AtomicInteger; - public class WebSocketConnection extends WebSocketListener { private static final AtomicInteger connectionCounter = new AtomicInteger(0); private static final int NORMAL_CLOSURE_STATUS = 1000; + private static final OkHttpClient client = HttpClientSingleton.getHttpClient(); private static final Logger logger = LoggerFactory.getLogger(WebSocketConnection.class); private final WebSocketCallback onOpenCallback; @@ -20,7 +23,6 @@ public class WebSocketConnection extends WebSocketListener { private final Request request; private final String streamName; - private final OkHttpClient client; private WebSocket webSocket; private final Object mutex; @@ -30,8 +32,7 @@ public WebSocketConnection( WebSocketCallback onMessageCallback, WebSocketCallback onClosingCallback, WebSocketCallback onFailureCallback, - Request request, - Duration pingInterval + Request request ) { this.onOpenCallback = onOpenCallback; this.onMessageCallback = onMessageCallback; @@ -42,10 +43,6 @@ public WebSocketConnection( this.streamName = request.url().host() + request.url().encodedPath(); this.webSocket = null; this.mutex = new Object(); - - OkHttpClient.Builder builder = HttpClientSingleton.getHttpClient().newBuilder(); - builder.pingInterval(pingInterval); - this.client = builder.build(); } public void connect() { From 2d0d12c1c7b1a26e7764603ff3d03faf36162a5f Mon Sep 17 00:00:00 2001 From: Artur Gawron Date: Wed, 29 Mar 2023 23:08:53 +0200 Subject: [PATCH 3/3] Add pinInterval option to websocket client --- .../futures/client/impl/CMWebsocketClientImpl.java | 9 +++++++-- .../futures/client/impl/UMWebsocketClientImpl.java | 9 +++++++-- .../futures/client/impl/WebsocketClientImpl.java | 7 +++++-- .../futures/client/utils/WebSocketConnection.java | 10 ++++++++-- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java index 05b234f..fa45a21 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/CMWebsocketClientImpl.java @@ -5,6 +5,7 @@ import com.binance.connector.futures.client.utils.WebSocketCallback; import com.binance.connector.futures.client.utils.ParameterChecker; import okhttp3.Request; +import java.time.Duration; /** *

COIN-M Websocket Streams

@@ -17,11 +18,15 @@ */ public class CMWebsocketClientImpl extends WebsocketClientImpl { public CMWebsocketClientImpl() { - super(DefaultUrls.COINM_WS_URL); + super(DefaultUrls.COINM_WS_URL, Duration.ZERO); } public CMWebsocketClientImpl(String baseUrl) { - super(baseUrl); + super(baseUrl, Duration.ZERO); + } + + public CMWebsocketClientImpl(String baseUrl, Duration pingInterval) { + super(baseUrl, pingInterval); } /** diff --git a/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java index bce6091..3bd4268 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/UMWebsocketClientImpl.java @@ -5,6 +5,7 @@ import com.binance.connector.futures.client.utils.WebSocketCallback; import com.binance.connector.futures.client.utils.ParameterChecker; import okhttp3.Request; +import java.time.Duration; /** *

USDⓈ-M Websocket Streams

@@ -18,11 +19,15 @@ public class UMWebsocketClientImpl extends WebsocketClientImpl { public UMWebsocketClientImpl() { - super(DefaultUrls.USDM_WS_URL); + super(DefaultUrls.USDM_WS_URL, Duration.ZERO); } public UMWebsocketClientImpl(String baseUrl) { - super(baseUrl); + super(baseUrl, Duration.ZERO); + } + + public UMWebsocketClientImpl(String baseUrl, Duration pingInterval) { + super(baseUrl, pingInterval); } /** diff --git a/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java b/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java index 513aa69..90d3f71 100644 --- a/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java +++ b/src/main/java/com/binance/connector/futures/client/impl/WebsocketClientImpl.java @@ -7,6 +7,7 @@ import com.binance.connector.futures.client.utils.WebSocketCallback; import com.binance.connector.futures.client.utils.WebSocketConnection; import com.binance.connector.futures.client.utils.ParameterChecker; +import java.time.Duration; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -28,13 +29,15 @@ */ public abstract class WebsocketClientImpl implements WebsocketClient { private final String baseUrl; + private final Duration pingInterval; private final Map connections = new HashMap<>(); private final WebSocketCallback noopCallback = msg -> { }; private static final Logger logger = LoggerFactory.getLogger(WebsocketClientImpl.class); - public WebsocketClientImpl(String baseUrl) { + public WebsocketClientImpl(String baseUrl, Duration pingInterval) { this.baseUrl = baseUrl; + this.pingInterval = pingInterval; } public WebSocketCallback getNoopCallback() { @@ -715,7 +718,7 @@ public int createConnection( WebSocketCallback onFailureCallback, Request request ) { - WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onFailureCallback, request); + WebSocketConnection connection = new WebSocketConnection(onOpenCallback, onMessageCallback, onClosingCallback, onFailureCallback, request, this.pingInterval); connection.connect(); int connectionId = connection.getConnectionId(); connections.put(connectionId, connection); diff --git a/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java b/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java index 4994b73..84bdd89 100644 --- a/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java +++ b/src/main/java/com/binance/connector/futures/client/utils/WebSocketConnection.java @@ -1,5 +1,6 @@ package com.binance.connector.futures.client.utils; +import java.time.Duration; import java.util.concurrent.atomic.AtomicInteger; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -12,7 +13,6 @@ public class WebSocketConnection extends WebSocketListener { private static final AtomicInteger connectionCounter = new AtomicInteger(0); private static final int NORMAL_CLOSURE_STATUS = 1000; - private static final OkHttpClient client = HttpClientSingleton.getHttpClient(); private static final Logger logger = LoggerFactory.getLogger(WebSocketConnection.class); private final WebSocketCallback onOpenCallback; @@ -23,6 +23,7 @@ public class WebSocketConnection extends WebSocketListener { private final Request request; private final String streamName; + private final OkHttpClient client; private WebSocket webSocket; private final Object mutex; @@ -32,7 +33,8 @@ public WebSocketConnection( WebSocketCallback onMessageCallback, WebSocketCallback onClosingCallback, WebSocketCallback onFailureCallback, - Request request + Request request, + Duration pingInterval ) { this.onOpenCallback = onOpenCallback; this.onMessageCallback = onMessageCallback; @@ -43,6 +45,10 @@ public WebSocketConnection( this.streamName = request.url().host() + request.url().encodedPath(); this.webSocket = null; this.mutex = new Object(); + + OkHttpClient.Builder builder = HttpClientSingleton.getHttpClient().newBuilder(); + builder.pingInterval(pingInterval); + this.client = builder.build(); } public void connect() {