diff --git a/.gitignore b/.gitignore
index 008d83b..abb02d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.DS_Store
.idea/
logs/
target
diff --git a/pom.xml b/pom.xml
index e39505b..9555c75 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.huobi.sdk
huobi-client
- 2.0.3-SNAPSHOT
+ 2.0.5-RELEASE
1.8
diff --git a/src/main/java/com/huobi/client/req/account/SubAccountUpdateRequest.java b/src/main/java/com/huobi/client/req/account/SubAccountUpdateRequest.java
index ba436f4..7092590 100644
--- a/src/main/java/com/huobi/client/req/account/SubAccountUpdateRequest.java
+++ b/src/main/java/com/huobi/client/req/account/SubAccountUpdateRequest.java
@@ -1,5 +1,6 @@
package com.huobi.client.req.account;
+import com.huobi.constant.enums.AccountActionEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -16,6 +17,8 @@
@ToString
public class SubAccountUpdateRequest {
- private AccountUpdateModeEnum accountUpdateMode;
+ private AccountActionEnum accountAction;
+
+ private AccountUpdateModeEnum accountUpdateMode;
}
diff --git a/src/main/java/com/huobi/client/req/market/ReqMarketDepthRequest.java b/src/main/java/com/huobi/client/req/market/ReqMarketDepthRequest.java
index c822a31..d0a90f9 100644
--- a/src/main/java/com/huobi/client/req/market/ReqMarketDepthRequest.java
+++ b/src/main/java/com/huobi/client/req/market/ReqMarketDepthRequest.java
@@ -17,6 +17,6 @@ public class ReqMarketDepthRequest {
private String symbol;
- private DepthStepEnum step;
+ private String step;
}
diff --git a/src/main/java/com/huobi/client/req/market/SubMarketDepthRequest.java b/src/main/java/com/huobi/client/req/market/SubMarketDepthRequest.java
index 5b07b54..76a3727 100644
--- a/src/main/java/com/huobi/client/req/market/SubMarketDepthRequest.java
+++ b/src/main/java/com/huobi/client/req/market/SubMarketDepthRequest.java
@@ -16,6 +16,6 @@
public class SubMarketDepthRequest {
private String symbol;
- private DepthStepEnum step;
+ private String step;
}
diff --git a/src/main/java/com/huobi/client/req/trade/SubOrderUpdateV2Request.java b/src/main/java/com/huobi/client/req/trade/SubOrderUpdateV2Request.java
index 84efab6..722ebbf 100644
--- a/src/main/java/com/huobi/client/req/trade/SubOrderUpdateV2Request.java
+++ b/src/main/java/com/huobi/client/req/trade/SubOrderUpdateV2Request.java
@@ -1,5 +1,6 @@
package com.huobi.client.req.trade;
+import com.huobi.constant.enums.AccountActionEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -13,6 +14,7 @@
@ToString
public class SubOrderUpdateV2Request {
- private String symbols;
+ private AccountActionEnum accountAction;
+ private String symbols;
}
diff --git a/src/main/java/com/huobi/client/req/trade/SubTradeClearingRequest.java b/src/main/java/com/huobi/client/req/trade/SubTradeClearingRequest.java
index 398bdd1..9a86add 100644
--- a/src/main/java/com/huobi/client/req/trade/SubTradeClearingRequest.java
+++ b/src/main/java/com/huobi/client/req/trade/SubTradeClearingRequest.java
@@ -1,5 +1,6 @@
package com.huobi.client.req.trade;
+import com.huobi.constant.enums.AccountActionEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -13,8 +14,10 @@
@ToString
public class SubTradeClearingRequest {
- private String symbols;
+ private AccountActionEnum accountAction;
- private int[] modes;
+ private String symbols;
+
+ private int[] modes;
}
diff --git a/src/main/java/com/huobi/constant/enums/AccountActionEnum.java b/src/main/java/com/huobi/constant/enums/AccountActionEnum.java
new file mode 100644
index 0000000..b97ab65
--- /dev/null
+++ b/src/main/java/com/huobi/constant/enums/AccountActionEnum.java
@@ -0,0 +1,18 @@
+package com.huobi.constant.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum AccountActionEnum {
+
+ ACTION_SUB("sub"),
+
+ ACTION_UNSUB("unsub"),
+ ;
+
+ private final String code;
+
+ AccountActionEnum(String code) {
+ this.code = code;
+ }
+}
diff --git a/src/main/java/com/huobi/constant/enums/AccountUpdateModeEnum.java b/src/main/java/com/huobi/constant/enums/AccountUpdateModeEnum.java
index 38e592e..3a145a5 100644
--- a/src/main/java/com/huobi/constant/enums/AccountUpdateModeEnum.java
+++ b/src/main/java/com/huobi/constant/enums/AccountUpdateModeEnum.java
@@ -16,7 +16,13 @@ public enum AccountUpdateModeEnum {
/**
* Subscribe TOTAL balance, total balance is the sum of available and frozen
*/
- ACCOUNT_CHANGE("1");
+ ACCOUNT_CHANGE("1"),
+
+ /**
+ * 在账户余额发生变动或可用余额发生变动时均推送且一起推送。
+ */
+ AVAILABLE_OR_CHANGE("2"),
+ ;
private final String code;
diff --git a/src/main/java/com/huobi/service/huobi/HuobiAccountService.java b/src/main/java/com/huobi/service/huobi/HuobiAccountService.java
index caff90c..cf351bb 100644
--- a/src/main/java/com/huobi/service/huobi/HuobiAccountService.java
+++ b/src/main/java/com/huobi/service/huobi/HuobiAccountService.java
@@ -14,6 +14,7 @@
import com.huobi.client.req.trade.SubTradeClearingRequest;
import com.huobi.constant.Options;
import com.huobi.constant.WebSocketConstants;
+import com.huobi.constant.enums.AccountActionEnum;
import com.huobi.constant.enums.AccountTypeEnum;
import com.huobi.exception.SDKException;
import com.huobi.model.account.*;
@@ -29,6 +30,7 @@
import com.huobi.utils.InputChecker;
import com.huobi.utils.ResponseCallback;
import com.huobi.utils.SymbolUtils;
+import org.apache.commons.lang.StringUtils;
public class HuobiAccountService implements AccountClient {
@@ -284,8 +286,9 @@ public void subAccountsUpdate(SubAccountUpdateRequest request, ResponseCallback<
InputChecker.checker()
.shouldNotNull(request.getAccountUpdateMode(), "account update model");
+ AccountActionEnum accountActionEnum = request.getAccountAction() != null ? request.getAccountAction() : AccountActionEnum.ACTION_SUB;
JSONObject command = new JSONObject();
- command.put("action", WebSocketConstants.ACTION_SUB);
+ command.put("action", accountActionEnum.getCode());
command.put("cid", System.currentTimeMillis() + "");
command.put("ch", SUB_ACCOUNT_UPDATE_TOPIC.replace("${mode}", request.getAccountUpdateMode().getCode()));
command.put("model", request.getAccountUpdateMode().getCode());
@@ -311,11 +314,12 @@ public void subOrderUpdateV2(SubOrderUpdateV2Request request, ResponseCallback commandList = new ArrayList<>(symbolList.size());
symbolList.forEach(symbol -> {
- String topic = WEBSOCKET_ORDER_UPDATE_V2_TOPIC
- .replace("${symbol}", symbol);
+ AccountActionEnum accountActionEnum = request.getAccountAction() != null ? request.getAccountAction() : AccountActionEnum.ACTION_SUB;
+
+ String topic = WEBSOCKET_ORDER_UPDATE_V2_TOPIC.replace("${symbol}", symbol);
JSONObject command = new JSONObject();
- command.put("action", WebSocketConstants.ACTION_SUB);
+ command.put("action", accountActionEnum.getCode());
command.put("ch", topic);
command.put("id", System.nanoTime());
commandList.add(command.toJSONString());
@@ -338,13 +342,15 @@ public void subTradeClearing(SubTradeClearingRequest request, ResponseCallback commandList = new ArrayList<>(symbolList.size());
for (int i = 0; i < symbolList.size(); i++) {
String topic = WEBSOCKET_TRADE_CLEARING_TOPIC
.replace("${symbol}", symbolList.get(i))
.replace("${mode}", String.valueOf(modeArray[i]));
JSONObject command = new JSONObject();
- command.put("action", WebSocketConstants.ACTION_SUB);
+ command.put("action", accountActionEnum.getCode());
command.put("ch", topic);
command.put("id", System.nanoTime());
commandList.add(command.toJSONString());
diff --git a/src/main/java/com/huobi/service/huobi/HuobiMarketService.java b/src/main/java/com/huobi/service/huobi/HuobiMarketService.java
index 9b68439..75308e2 100644
--- a/src/main/java/com/huobi/service/huobi/HuobiMarketService.java
+++ b/src/main/java/com/huobi/service/huobi/HuobiMarketService.java
@@ -54,6 +54,8 @@ public HuobiMarketService(Options options) {
public static final String WEBSOCKET_MARKET_MBP_INCREMENT_TOPIC = "market.$symbol.mbp.$levels";//市场深度MBP行情数据(增量推送)
public static final String WEBSOCKET_MARKET_TICKERS_PATH = "market.$symbol.ticker";//聚合行情(Ticker)数据
+
+
@Override
public List getCandlestick(CandlestickRequest request) {
@@ -206,7 +208,7 @@ public void subMarketDepth(SubMarketDepthRequest request, ResponseCallback commandList = new ArrayList<>(symbolList.size());
symbolList.forEach(symbol -> {
@@ -469,7 +471,7 @@ public void reqMarketDepth(ReqMarketDepthRequest request, ResponseCallback headers) {
Options options = this.getOptions();
String url = options.getRestHost() + path + paramsBuilder.buildUrl();
- Request executeRequest = new Request.Builder()
+ Request.Builder builder = new Request.Builder()
.url(url)
- .addHeader("Content-Type", "application/x-www-form-urlencoded")
- .build();
+ .addHeader("Content-Type", "application/x-www-form-urlencoded");
- String resp = ConnectionFactory.execute(executeRequest);
+ if (headers != null && !headers.isEmpty()) {
+ headers.forEach(builder::addHeader);
+ }
+
+ String resp = ConnectionFactory.execute(builder.build());
return checkAndGetResponse(resp);
}
public String executeGetString(String url, UrlParamsBuilder paramsBuilder) {
+ return executeGetString(url, paramsBuilder, null);
+ }
+
+ public String executeGetString(String url, UrlParamsBuilder paramsBuilder, Map headers) {
String realUrl = url + paramsBuilder.buildUrl();
- Request executeRequest = new Request.Builder()
+ Request.Builder builder = new Request.Builder()
.url(realUrl)
- .addHeader("Content-Type", "application/x-www-form-urlencoded")
- .build();
- String resp = ConnectionFactory.execute(executeRequest);
+ .addHeader("Content-Type", "application/x-www-form-urlencoded");
+
+ if (headers != null && !headers.isEmpty()) {
+ headers.forEach(builder::addHeader);
+ }
+
+ String resp = ConnectionFactory.execute(builder.build());
return resp;
}
- public JSONObject executeGetWithSignature(String path, UrlParamsBuilder paramsBuilder) {
-
+ public JSONObject executeGetWithSignature(String path, UrlParamsBuilder paramsBuilder) {
+ return executeGetWithSignature(path, paramsBuilder, null);
+ }
+ public JSONObject executeGetWithSignature(String path, UrlParamsBuilder paramsBuilder, Map headers) {
Options options = this.getOptions();
String requestUrl = options.getRestHost() + path;
@@ -69,23 +89,38 @@ public JSONObject executeGetWithSignature(String path, UrlParamsBuilder paramsBu
requestUrl += paramsBuilder.buildUrl();
System.out.println(requestUrl);
- Request executeRequest = new Request.Builder().url(requestUrl)
- .addHeader("Content-Type", "application/x-www-form-urlencoded").build();
+ Request.Builder builder = new Request.Builder()
+ .url(requestUrl)
+ .addHeader("Content-Type", "application/x-www-form-urlencoded");
+
+ if (headers != null && !headers.isEmpty()) {
+ headers.forEach(builder::addHeader);
+ }
- String resp = ConnectionFactory.execute(executeRequest);
+ String resp = ConnectionFactory.execute(builder.build());
return checkAndGetResponse(resp);
}
+ public JSONObject executePostWithSignature(String path, UrlParamsBuilder paramsBuilder){
+ return executePostWithSignature(path, paramsBuilder, null);
+ }
- public JSONObject executePostWithSignature(String path, UrlParamsBuilder paramsBuilder){
+ public JSONObject executePostWithSignature(String path, UrlParamsBuilder paramsBuilder, Map headers){
Options options = this.getOptions();
String requestUrl = options.getRestHost() + path;
new ApiSignature().createSignature(options.getApiKey(), options.getSecretKey(), "POST", host, path, paramsBuilder);
requestUrl += paramsBuilder.buildUrl();
- Request executeRequest = new Request.Builder().url(requestUrl).post(paramsBuilder.buildPostBody())
- .addHeader("Content-Type", "application/json").build();
- String resp = ConnectionFactory.execute(executeRequest);
+ Request.Builder builder = new Request.Builder()
+ .url(requestUrl)
+ .post(paramsBuilder.buildPostBody())
+ .addHeader("Content-Type", "application/json");
+
+ if (headers != null && !headers.isEmpty()) {
+ headers.forEach(builder::addHeader);
+ }
+
+ String resp = ConnectionFactory.execute(builder.build());
return checkAndGetResponse(resp);
}
@@ -185,5 +220,4 @@ JSONObject checkAndGetResponse(String resp) {
return json;
}
-
}