From d13a248b41b76ecb7f4df1ba0422ff58f30f6a76 Mon Sep 17 00:00:00 2001 From: zhangyaoyu Date: Thu, 22 Apr 2021 23:21:59 +0800 Subject: [PATCH 1/4] fix bug: PrivateWSClient npe because apiKeyVersion is null. --- .../com/kucoin/sdk/impl/KucoinPrivateWSClientImpl.java | 3 ++- .../sdk/rest/adapter/WebsocketPrivateAPIAdaptor.java | 3 ++- .../sdk/rest/impl/retrofit/AbstractRetrofitAPIImpl.java | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kucoin/sdk/impl/KucoinPrivateWSClientImpl.java b/src/main/java/com/kucoin/sdk/impl/KucoinPrivateWSClientImpl.java index f9b2577..6fc92be 100644 --- a/src/main/java/com/kucoin/sdk/impl/KucoinPrivateWSClientImpl.java +++ b/src/main/java/com/kucoin/sdk/impl/KucoinPrivateWSClientImpl.java @@ -38,7 +38,8 @@ public KucoinPrivateWSClientImpl(KucoinClientBuilder kucoinClientBuilder) { new WebsocketPrivateAPIAdaptor(kucoinClientBuilder.getBaseUrl(), kucoinClientBuilder.getApiKey(), kucoinClientBuilder.getSecret(), - kucoinClientBuilder.getPassPhrase())); + kucoinClientBuilder.getPassPhrase(), + kucoinClientBuilder.getApiKeyVersion())); } private KucoinPrivateWSClientImpl(OkHttpClient client, diff --git a/src/main/java/com/kucoin/sdk/rest/adapter/WebsocketPrivateAPIAdaptor.java b/src/main/java/com/kucoin/sdk/rest/adapter/WebsocketPrivateAPIAdaptor.java index 3e7f1d1..f26866d 100644 --- a/src/main/java/com/kucoin/sdk/rest/adapter/WebsocketPrivateAPIAdaptor.java +++ b/src/main/java/com/kucoin/sdk/rest/adapter/WebsocketPrivateAPIAdaptor.java @@ -16,11 +16,12 @@ public class WebsocketPrivateAPIAdaptor extends AuthRetrofitAPIImpl implements WebsocketPrivateAPI { - public WebsocketPrivateAPIAdaptor(String baseUrl, String apiKey, String secret, String passPhrase) { + public WebsocketPrivateAPIAdaptor(String baseUrl, String apiKey, String secret, String passPhrase, Integer apiKeyVersion) { this.baseUrl = baseUrl; this.apiKey = apiKey; this.secret = secret; this.passPhrase = passPhrase; + this.apiKeyVersion = apiKeyVersion; } @Override diff --git a/src/main/java/com/kucoin/sdk/rest/impl/retrofit/AbstractRetrofitAPIImpl.java b/src/main/java/com/kucoin/sdk/rest/impl/retrofit/AbstractRetrofitAPIImpl.java index 35b26bc..1d64126 100644 --- a/src/main/java/com/kucoin/sdk/rest/impl/retrofit/AbstractRetrofitAPIImpl.java +++ b/src/main/java/com/kucoin/sdk/rest/impl/retrofit/AbstractRetrofitAPIImpl.java @@ -97,4 +97,12 @@ public String getPassPhrase() { public void setPassPhrase(String passPhrase) { this.passPhrase = passPhrase; } + + public Integer getApiKeyVersion() { + return apiKeyVersion; + } + + public void setApiKeyVersion(Integer apiKeyVersion) { + this.apiKeyVersion = apiKeyVersion; + } } From 0232980c551a4bf40eb63f1377dcd90c0a527fe0 Mon Sep 17 00:00:00 2001 From: zhangyaoyu Date: Fri, 30 Apr 2021 17:58:49 +0800 Subject: [PATCH 2/4] add pingInterval; change log; --- src/main/java/com/kucoin/sdk/factory/HttpClientFactory.java | 5 ++++- .../websocket/listener/KucoinPublicWebsocketListener.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kucoin/sdk/factory/HttpClientFactory.java b/src/main/java/com/kucoin/sdk/factory/HttpClientFactory.java index 5ce529c..646a790 100644 --- a/src/main/java/com/kucoin/sdk/factory/HttpClientFactory.java +++ b/src/main/java/com/kucoin/sdk/factory/HttpClientFactory.java @@ -8,6 +8,8 @@ import okhttp3.Interceptor; import okhttp3.OkHttpClient; +import java.util.concurrent.TimeUnit; + /** * Created by chenshiwei on 2019/1/18. */ @@ -26,7 +28,8 @@ private static OkHttpClient buildHttpClient(Interceptor interceptor) { dispatcher.setMaxRequestsPerHost(100); dispatcher.setMaxRequests(100); OkHttpClient.Builder builder = new OkHttpClient.Builder() - .dispatcher(dispatcher); + .dispatcher(dispatcher) + .pingInterval(20, TimeUnit.SECONDS); if (interceptor != null) { builder.addInterceptor(interceptor); } diff --git a/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java b/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java index 13c26c4..f39154a 100644 --- a/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java +++ b/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java @@ -94,7 +94,7 @@ public void onMessage(WebSocket webSocket, String text) { @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { - LOGGER.error("Error on private socket", t); + LOGGER.error("Error on public socket", t); } private JsonNode tree(String text) { From 64c2e2982377faf7fe535c70620b363f9680c600 Mon Sep 17 00:00:00 2001 From: zhangyaoyu Date: Fri, 30 Apr 2021 18:02:10 +0800 Subject: [PATCH 3/4] fix bug: jackson deserialize error --- .../kucoin/sdk/websocket/event/AccountChangeEvent.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kucoin/sdk/websocket/event/AccountChangeEvent.java b/src/main/java/com/kucoin/sdk/websocket/event/AccountChangeEvent.java index 2b23a07..91a6b50 100644 --- a/src/main/java/com/kucoin/sdk/websocket/event/AccountChangeEvent.java +++ b/src/main/java/com/kucoin/sdk/websocket/event/AccountChangeEvent.java @@ -27,7 +27,7 @@ public class AccountChangeEvent { private String relationEvent; - private String relationContext; + private RelationContext relationContext; private String relationEventId; @@ -35,4 +35,12 @@ public class AccountChangeEvent { private String accountId; + @Data + public static class RelationContext { + + private String symbol; + + private String orderId; + } + } From 1fafa885ddf4c18f4b7d0c813ff1b6a5020ce0e9 Mon Sep 17 00:00:00 2001 From: zhangtory Date: Wed, 26 Apr 2023 21:48:42 +0800 Subject: [PATCH 4/4] update --- .../com/kucoin/sdk/KucoinClientBuilder.java | 19 ++++++++++++++- .../sdk/impl/KucoinPublicWSClientImpl.java | 9 ++++++++ .../KucoinPublicWebsocketListener.java | 23 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kucoin/sdk/KucoinClientBuilder.java b/src/main/java/com/kucoin/sdk/KucoinClientBuilder.java index 1d13fd0..9cd0061 100644 --- a/src/main/java/com/kucoin/sdk/KucoinClientBuilder.java +++ b/src/main/java/com/kucoin/sdk/KucoinClientBuilder.java @@ -7,6 +7,7 @@ import com.kucoin.sdk.rest.adapter.*; import com.kucoin.sdk.rest.interfaces.*; +import com.kucoin.sdk.websocket.KucoinAPICallback; import org.apache.commons.lang3.StringUtils; import com.kucoin.sdk.constants.APIConstants; @@ -69,6 +70,9 @@ public class KucoinClientBuilder { private LoanAPI loanAPI; + private KucoinAPICallback connectedCallback; + private KucoinAPICallback disConnectedCallback; + public KucoinRestClient buildRestClient() { if (StringUtils.isBlank(baseUrl)) baseUrl = APIConstants.API_BASE_URL; if (userAPI == null) userAPI = new UserAPIAdapter(baseUrl, apiKey, secret, passPhrase, apiKeyVersion); @@ -92,7 +96,12 @@ public KucoinRestClient buildRestClient() { public KucoinPublicWSClient buildPublicWSClient() throws IOException { if (StringUtils.isBlank(baseUrl)) baseUrl = APIConstants.API_BASE_URL; if (chooseServerStrategy == null) chooseServerStrategy = new RandomChooseStrategy(); - KucoinPublicWSClientImpl client = new KucoinPublicWSClientImpl(this); + KucoinPublicWSClientImpl client; + if (connectedCallback == null) { + client = new KucoinPublicWSClientImpl(this); + } else { + client = new KucoinPublicWSClientImpl(this, connectedCallback, disConnectedCallback); + } client.connect(); return client; } @@ -181,4 +190,12 @@ public KucoinClientBuilder withChooseServerStrategy(ChooseServerStrategy chooseS this.chooseServerStrategy = chooseServerStrategy; return this; } + + public KucoinClientBuilder withCallback(KucoinAPICallback connectedCallback, + KucoinAPICallback disconnectedCallback) { + this.connectedCallback = connectedCallback; + this.disConnectedCallback = disconnectedCallback; + return this; + } + } diff --git a/src/main/java/com/kucoin/sdk/impl/KucoinPublicWSClientImpl.java b/src/main/java/com/kucoin/sdk/impl/KucoinPublicWSClientImpl.java index 59d7b36..5c4b53a 100644 --- a/src/main/java/com/kucoin/sdk/impl/KucoinPublicWSClientImpl.java +++ b/src/main/java/com/kucoin/sdk/impl/KucoinPublicWSClientImpl.java @@ -38,6 +38,15 @@ public KucoinPublicWSClientImpl(KucoinClientBuilder kucoinClientBuilder) { new WebsocketPublicAPIAdaptor(kucoinClientBuilder.getBaseUrl())); } + public KucoinPublicWSClientImpl(KucoinClientBuilder kucoinClientBuilder, + KucoinAPICallback connectedCallback, KucoinAPICallback disconnectedCallback) { + this( + HttpClientFactory.getPublicClient(), + new KucoinPublicWebsocketListener(connectedCallback, disconnectedCallback), + kucoinClientBuilder.getChooseServerStrategy(), + new WebsocketPublicAPIAdaptor(kucoinClientBuilder.getBaseUrl())); + } + private KucoinPublicWSClientImpl(OkHttpClient client, KucoinPublicWebsocketListener listener, ChooseServerStrategy chooseServerStrategy, diff --git a/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java b/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java index f39154a..481c382 100644 --- a/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java +++ b/src/main/java/com/kucoin/sdk/websocket/listener/KucoinPublicWebsocketListener.java @@ -39,9 +39,21 @@ public class KucoinPublicWebsocketListener extends WebSocketListener { private KucoinAPICallback> level3V2Callback = new PrintCallback<>(); private KucoinAPICallback> snapshotCallback = new PrintCallback<>(); + private KucoinAPICallback connectedCallback; + private KucoinAPICallback disConnectedCallback; + + public KucoinPublicWebsocketListener() {} + + public KucoinPublicWebsocketListener(KucoinAPICallback connectedCallback, + KucoinAPICallback disConnectedCallback) { + this.connectedCallback = connectedCallback; + this.disConnectedCallback = disConnectedCallback; + } + @Override public void onOpen(WebSocket webSocket, Response response) { LOGGER.debug("web socket open"); + this.connectedCallback.onResponse(response.message()); } @Override @@ -95,6 +107,17 @@ public void onMessage(WebSocket webSocket, String text) { @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { LOGGER.error("Error on public socket", t); + this.disConnectedCallback.onResponse(response.message()); + } + + @Override + public void onClosing(WebSocket webSocket, int code, String reason) { + this.disConnectedCallback.onResponse(reason); + } + + @Override + public void onClosed(WebSocket webSocket, int code, String reason) { + this.disConnectedCallback.onResponse(reason); } private JsonNode tree(String text) {