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);