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/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/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/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; + } } 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; + } + } 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..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 @@ -94,7 +106,18 @@ 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); + 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) {