diff --git a/bitget-java-sdk-api/pom.xml b/bitget-java-sdk-api/pom.xml
index f3562ac..db4a6de 100755
--- a/bitget-java-sdk-api/pom.xml
+++ b/bitget-java-sdk-api/pom.xml
@@ -11,11 +11,11 @@
http://www.bitget.com/
- 1.8
- 1.16.20
+ 17
+ 1.18.30
4.7.2
2.8.1
- 1.2.70
+ 1.2.80
3.7
1.14
4.12
@@ -107,8 +107,8 @@
org.apache.maven.plugins
maven-compiler-plugin
- 1.8
- 1.8
+ ${java.version}
+ ${java.version}
@@ -118,6 +118,21 @@
true
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
@@ -129,26 +144,10 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.7.0
-
- 1.8
- 1.8
-
+ 3.11.0
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.0.1
-
-
- attach-sources
-
- jar-no-fork
-
-
-
-
+
org.apache.maven.plugins
maven-javadoc-plugin
diff --git a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/client/ApiClient.java b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/client/ApiClient.java
index 24ccb1c..01496ac 100755
--- a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/client/ApiClient.java
+++ b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/client/ApiClient.java
@@ -53,6 +53,7 @@ private OkHttpClient httpClient() {
.addInterceptor(new HttpStatusInterceptor())
.connectTimeout(parameter.getTimeout(), TimeUnit.SECONDS)
.readTimeout(parameter.getTimeout(), TimeUnit.SECONDS)
+ .proxy(parameter.getProxy())
.build();
}
@@ -107,6 +108,10 @@ public Response intercept(Chain chain) {
.addHeader(HttpHeader.ACCESS_TIMESTAMP, timestamp)
.url(url);
+ if (clientParameter.isPapTrading()) {
+ requestBuilder.addHeader(HttpHeader.PAPTRADING, "1");
+ }
+
Request request = requestBuilder.build();
return chain.proceed(request);
} catch (Exception e) {
diff --git a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/constant/HttpHeader.java b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/constant/HttpHeader.java
index 82d6ce3..ff71270 100644
--- a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/constant/HttpHeader.java
+++ b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/constant/HttpHeader.java
@@ -21,4 +21,5 @@ public class HttpHeader {
public static final String CONTENT_TYPE = "Content-Type";
public static final String LOCALE = "locale";
public static final String COOKIE = "Cookie";
+ public static final String PAPTRADING = "paptrading";
}
diff --git a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/domain/ClientParameter.java b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/domain/ClientParameter.java
index c917908..012fd9c 100755
--- a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/domain/ClientParameter.java
+++ b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/common/domain/ClientParameter.java
@@ -6,6 +6,8 @@
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.net.Proxy;
+
/**
* @author bitget-sdk-team
* @date 2019-01-15
@@ -50,4 +52,15 @@ public class ClientParameter {
* 签名类型
*/
private SignTypeEnum signType = SignTypeEnum.SHA256;
+
+
+ /**
+ * 代理配置
+ */
+ private Proxy proxy;
+
+ /**
+ * 是否是模拟交易
+ */
+ private boolean isPapTrading = false;
}
diff --git a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/ws/BitgetWsHandle.java b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/ws/BitgetWsHandle.java
index 9f14ec4..b045653 100644
--- a/bitget-java-sdk-api/src/main/java/com/bitget/openapi/ws/BitgetWsHandle.java
+++ b/bitget-java-sdk-api/src/main/java/com/bitget/openapi/ws/BitgetWsHandle.java
@@ -9,12 +9,15 @@
import com.bitget.openapi.dto.request.ws.WsBaseReq;
import com.bitget.openapi.dto.request.ws.WsLoginReq;
import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import java.math.BigDecimal;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -26,6 +29,7 @@
import java.util.stream.Collectors;
import java.util.zip.CRC32;
+@Slf4j
public class BitgetWsHandle implements BitgetWsClient {
public static final String WS_OP_LOGIN = "login";
public static final String WS_OP_SUBSCRIBE = "subscribe";
@@ -47,15 +51,12 @@ private BitgetWsHandle(BitgetClientBuilder builder) {
webSocket = initClient();
}
- private static void printLog(String msg, String type) {
- System.out.println("[" + DateUtil.getUnixTime() + "] [" + type.toUpperCase() + "] " + msg);
- }
-
private WebSocket initClient() {
OkHttpClient client = new OkHttpClient.Builder()
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
+ .proxy(builder.proxy)
.build();
Request request = new Request.Builder()
@@ -67,7 +68,7 @@ private WebSocket initClient() {
if (builder.isLogin) {
login();
}
- printLog("start connect ....", "info");
+ log.info("开始连接WebSocket服务器...");
while (!connectStatus) {
}
@@ -80,13 +81,11 @@ public static BitgetClientBuilder builder() {
@Override
public void sendMessage(WsBaseReq> req) {
- printLog("send message:" + JSONObject.toJSONString(req), "info");
sendMessage(JSONObject.toJSONString(req));
}
@Override
public void sendMessage(String message) {
- printLog("start send message:" + message, "INFO");
webSocket.send(message);
}
@@ -130,7 +129,7 @@ public void login() {
List args = buildArgs();
sendMessage(new WsBaseReq<>(WS_OP_LOGIN, args));
//休眠1s,等待登录结果
- printLog("login in ......", "info");
+ log.info("开始WebSocket登录流程...");
while (!this.loginStatus) {
try {
Thread.sleep(10000);
@@ -140,7 +139,7 @@ public void login() {
e.printStackTrace();
}
}
- printLog("login in ......end", "info");
+ log.info("WebSocket登录成功");
}
private List buildArgs() {
@@ -212,7 +211,7 @@ public void onOpen(final WebSocket webSocket, final Response response) {
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
- System.out.println("Connection is about to disconnect!");
+ log.info("连接即将断开!");
close();
if (!reconnectStatus) {
reConnect();
@@ -222,7 +221,7 @@ public void onClosing(WebSocket webSocket, int code, String reason) {
@Override
public void onClosed(final WebSocket webSocket, final int code, final String reason) {
- System.out.println("Connection dropped!" + reason);
+ log.info("连接已断开:{}", reason);
close();
if (!reconnectStatus) {
reConnect();
@@ -249,12 +248,12 @@ public void onFailure(final WebSocket webSocket, final Throwable t, final Respon
public void onMessage(final WebSocket webSocket, final String message) {
try {
if (message.equals("pong")) {
- printLog("Keep connected:" + message, "info");
+ log.info("保持连接:收到pong响应");
return;
}
JSONObject jsonObject = JSONObject.parseObject(message);
if (jsonObject.containsKey("code") && !jsonObject.get("code").toString().equals("0")) {
- printLog("code not is 0 msg:" + message, "error");
+ log.error("code not is 0 msg:{}", message);
if (Objects.nonNull(builder.errorListener)) {
builder.errorListener.onReceive(message);
}
@@ -262,7 +261,7 @@ public void onMessage(final WebSocket webSocket, final String message) {
}
if (jsonObject.containsKey("event") && jsonObject.get("event").equals("login")) {
- printLog("login msg:" + message, "info");
+ log.info("login msg:{}", message);
loginStatus = true;
return;
}
@@ -285,9 +284,9 @@ public void onMessage(final WebSocket webSocket, final String message) {
return;
}
}
- printLog("receive op msg:" + message, "info");
+ log.info("receive op msg:{}", message);
} catch (Exception e) {
- printLog("receive error msg:" + message, "error");
+ log.error("receive error msg:{}", message);
}
}
@@ -353,7 +352,7 @@ private void close() {
private void reConnect() {
reconnectStatus = true;
- printLog("start reconnection ...", "info");
+ log.info("开始重新连接WebSocket服务器...");
initClient();
if (CollectionUtils.isNotEmpty(allSuribe)) {
subscribe(new ArrayList<>(allSuribe));
@@ -374,6 +373,8 @@ public static class BitgetClientBuilder {
private SubscriptionListener listener;
private SubscriptionListener errorListener;
+ private Proxy proxy;
+
public BitgetClientBuilder listener(SubscriptionListener listener) {
this.listener = listener;
return this;
@@ -414,6 +415,23 @@ public BitgetClientBuilder signType(SignTypeEnum signType) {
return this;
}
+ public BitgetClientBuilder proxy(Proxy proxy) {
+ this.proxy = proxy;
+ return this;
+ }
+
+ /**
+ * 设置代理
+ * @param type 代理类型
+ * @param hostname 主机名
+ * @param port 端口号
+ * @return
+ */
+ public BitgetClientBuilder proxy(Proxy.Type type,String hostname, int port) {
+ this.proxy = new Proxy(type, new InetSocketAddress(hostname, port));
+ return this;
+ }
+
public BitgetWsClient build() {
return new BitgetWsHandle(this);
}
@@ -432,9 +450,9 @@ public BookInfo() {
public BookInfo merge(BookInfo updateInfo) {
this.asks = merge(this.asks, updateInfo.getAsks(), false);
- printLog("asks sort uniq:" + JSONObject.toJSONString(this.asks), "info");
+ log.info("asks sort uniq:{}", JSONObject.toJSONString(this.asks));
this.bids = merge(this.bids, updateInfo.getBids(), true);
- printLog("bids sort uniq:" + JSONObject.toJSONString(this.bids), "info");
+ log.info("bids sort uniq:{}", JSONObject.toJSONString(this.bids));
return this;
}
@@ -484,8 +502,8 @@ public boolean checkSum(int checkSum, int gear) {
CRC32 crc32 = new CRC32();
crc32.update(str.getBytes());
int value = (int) crc32.getValue();
- printLog("check val:" + str, "info");
- printLog("start checknum mergeVal:" + value + ",checkVal:" + checkSum, "info");
+ log.info("check val:{}", str);
+ log.info("start checknum mergeVal:{} checkVal:{}", value, checkSum);
return value == checkSum;
}
}
diff --git a/bitget-java-sdk-api/src/test/java/com/bitget/openapi/ws/BitgetWsClientTest.java b/bitget-java-sdk-api/src/test/java/com/bitget/openapi/ws/BitgetWsClientTest.java
index 19cd362..d896140 100644
--- a/bitget-java-sdk-api/src/test/java/com/bitget/openapi/ws/BitgetWsClientTest.java
+++ b/bitget-java-sdk-api/src/test/java/com/bitget/openapi/ws/BitgetWsClientTest.java
@@ -1,24 +1,29 @@
package com.bitget.openapi.ws;
import com.alibaba.fastjson.JSONObject;
+import com.bitget.openapi.common.enums.SignTypeEnum;
import com.bitget.openapi.dto.request.ws.SubscribeReq;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
import java.util.ArrayList;
import java.util.List;
public class BitgetWsClientTest {
- public static final String PUSH_URL = "wss://ws.bitget.com/mix/v1/stream";
+ public static final String PUSH_URL = "wss://wspap.bitget.com/mix/v1/stream";
public static final String API_KEY = "";
public static final String SECRET_KEY = "";
public static final String PASS_PHRASE = "";
-
+ public static final String PROXY_HOST = "localhost";
+ public static final int PROXY_PORT = 10808;
public static void main(String[] args) {
BitgetWsClient client = BitgetWsHandle.builder()
.pushUrl(PUSH_URL)
.apiKey(API_KEY)
.secretKey(SECRET_KEY)
.passPhrase(PASS_PHRASE)
+ .proxy(Proxy.Type.HTTP,PROXY_HOST, PROXY_PORT)
// .signType(SignTypeEnum.RSA)
.isLogin(true)
//默认监听处理,如订阅时指定监听,默认不再接收该channel订阅信息
@@ -32,7 +37,8 @@ public static void main(String[] args) {
}).build();
List list = new ArrayList() {{
- add(SubscribeReq.builder().instType("UMCBL").channel("positions").instId("default").build());
+// add(SubscribeReq.builder().instType("UMCBL").channel("positions").instId("default").build());
+ add(SubscribeReq.builder().instType("mc").channel("ticker").instId("ETHUSDT").build());
// add(SubscribeReq.builder().instType("SP").channel("candle1W").instId("BTCUSDT").build());
}};
client.subscribe(list);