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() {