Skip to content

ws support protobuf #48

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@
<version>2.9.0</version>
</dependency>

<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>4.29.3</version>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@
@Slf4j
public class WithdrawApply {
public static Withdraw withdraw(Map<String, String> params) {
return UserDataClient.post("/api/v3/capital/withdraw/apply", params, new TypeReference<Withdraw>() {
return UserDataClient.post("/api/v3/capital/withdraw", params, new TypeReference<Withdraw>() {
});
}

public static void main(String[] args) {
//withdraw apply
HashMap<String, String> withdrawParams = Maps.newHashMap(ImmutableMap.<String, String>builder()
.put("coin", "USDT-TRX")
.put("address", "TPb5qT9ZikopzCUD4zyieSEfwbjdjU8PVb")
.put("amount", "3")
.put("network", "TRC20")
.put("coin", "USDT")
.put("address", "TLHwAkP8Ao5vHc8GR9KvwhrJHwJN142ECZ")
.put("amount", "0.1")
.put("netWork", "TRX")
.put("recvWindow", "60000")
.build());

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.mexc.example.spot.api.v3.wallet;

import com.fasterxml.jackson.core.type.TypeReference;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.mexc.example.common.JsonUtil;
import com.mexc.example.common.UserDataClient;
import com.mexc.example.spot.api.v3.pojo.Withdraw;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

@Slf4j
public class WithdrawApplyOld {
public static Withdraw withdraw(Map<String, String> params) {
return UserDataClient.post("/api/v3/capital/withdraw/apply", params, new TypeReference<Withdraw>() {
});
}

public static void main(String[] args) {
//withdraw apply
HashMap<String, String> withdrawParams = Maps.newHashMap(ImmutableMap.<String, String>builder()
.put("coin", "USDT-TRX")
.put("address", "TPb5qT9ZikopzCUD4zyieSEfwbjdjU8PVb")
.put("amount", "3")
.put("network", "TRC20")
.put("recvWindow", "60000")
.build());

Object withdraw = withdraw(withdrawParams);
log.info("===>>withdraw resp:{}", JsonUtil.toJson(withdraw));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.mexc.example.spot.websocket;


import com.mexc.example.common.JsonUtil;
import lombok.Getter;
import lombok.Setter;

import java.util.Collections;
import java.util.List;

@Setter
@Getter
public class SubscriptionCommand {

private String method = "SUBSCRIPTION";

private List<String> params;

public SubscriptionCommand(String channel) {
this.params = Collections.singletonList(channel);
}

public String toJsonString() {
return JsonUtil.toJson(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
package com.mexc.example.spot.websocket;

import com.google.protobuf.InvalidProtocolBufferException;
import com.mxc.push.common.protobuf.PushDataV3ApiWrapper;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import okio.ByteString;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

@Slf4j
public final class WebsocketV3Protobuf extends WebSocketListener {


private WebSocket privateClient() {
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.build();
Map<String, String> params = new HashMap<>();
params.put("recWindow", "60000");
//String listenKey = CreateListenKey.postUserDataStream(params).get("listenKey");
String listenKey = "1955374b3a1e64a47fe177678229d1238539a746d4a62ea9475cc4a394230425";

Request request = new Request.Builder()
.url("wss://wbs-api.mexc.com/ws?listenKey=" + listenKey)
.build();
WebSocket webSocket = client.newWebSocket(request, this);

//Trigger shutdown of the dispatcher's executor so this process can exit cleanly.
client.dispatcher().executorService().shutdown();
return webSocket;
}

private WebSocket publicClient() {
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.build();

Request request = new Request.Builder()
.url("wss://wbs-api.mexc.com/ws")
.build();
WebSocket webSocket = client.newWebSocket(request, this);

//Trigger shutdown of the dispatcher's executor so this process can exit cleanly.
client.dispatcher().executorService().shutdown();
return webSocket;
}

@Override
public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) {
log.info("MEXC-WS CONNECTED ....");
}

@Override
public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) {
System.out.println("TEXT MESSAGE: " + text);
}

@Override
public void onMessage(@NotNull WebSocket webSocket, ByteString bytes) {
try {
PushDataV3ApiWrapper pushDataV3ApiWrapper = PushDataV3ApiWrapper.parseFrom(bytes.toByteArray());
String channel = pushDataV3ApiWrapper.getChannel();
switch (channel) {
case "[email protected]@100ms@BTCUSDT":
log.info("Trade Streams:{}", pushDataV3ApiWrapper.getPublicAggreDeals());
break;

case "[email protected]@BTCUSDT@Min15":
log.info("K-line Streams:{}", pushDataV3ApiWrapper.getPublicSpotKline());
break;

case "[email protected]@100ms@BTCUSDT":
log.info("Diff.Depth Stream:{}", pushDataV3ApiWrapper.getPublicAggreDepths());
break;

case "[email protected]@BTCUSDT":
log.info("Diff.Depth Stream(Batch):{}", pushDataV3ApiWrapper.getPublicIncreaseDepthsBatch());
break;

case "[email protected]@BTCUSDT@5":
log.info("Partial Book Depth Streams:{}", pushDataV3ApiWrapper.getPublicLimitDepths());
break;

case "[email protected]@100ms@BTCUSDT":
log.info("Individual Symbol Book Ticker Streams:{}", pushDataV3ApiWrapper.getPublicAggreBookTicker());
break;
case "[email protected]@BTCUSDT":
log.info("Individual Symbol Book Ticker Streams(Batch):{}", pushDataV3ApiWrapper.getPublicBookTickerBatch());
break;

case "[email protected]":
log.info("Spot Account Update:{}", pushDataV3ApiWrapper.getPrivateAccount());
break;

case "[email protected]":
log.info("Spot Account Deals:{}", pushDataV3ApiWrapper.getPrivateDeals());
break;

case "[email protected]":
log.info("Spot Account Orders:{}", pushDataV3ApiWrapper.getPrivateOrders());
break;

default:
break;
}
} catch (InvalidProtocolBufferException e) {
throw new RuntimeException(e);
}
}

@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(1000, null);
System.out.println("CLOSE: " + code + " " + reason);
}

@Override
public void onFailure(@NotNull WebSocket webSocket, Throwable t, Response response) {
t.printStackTrace();
}

public static void main(String... args) {
WebsocketV3Protobuf websocketV3 = new WebsocketV3Protobuf();
//sub public channel
WebSocket publicClient = websocketV3.publicClient();
publicClient.send(new SubscriptionCommand("[email protected]@100ms@BTCUSDT").toJsonString());
publicClient.send(new SubscriptionCommand("[email protected]@BTCUSDT@Min15").toJsonString());
publicClient.send(new SubscriptionCommand("[email protected]@100ms@BTCUSDT").toJsonString());
publicClient.send(new SubscriptionCommand("[email protected]@BTCUSDT").toJsonString());
publicClient.send(new SubscriptionCommand("[email protected]@BTCUSDT@5").toJsonString());
publicClient.send(new SubscriptionCommand("[email protected]@100ms@BTCUSDT").toJsonString());
publicClient.send(new SubscriptionCommand("[email protected]@BTCUSDT").toJsonString());

//sub private channel
WebSocket privateClient = websocketV3.privateClient();
privateClient.send(new SubscriptionCommand("[email protected]").toJsonString());
privateClient.send(new SubscriptionCommand("[email protected]").toJsonString());
privateClient.send(new SubscriptionCommand("[email protected]").toJsonString());

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleAtFixedRate(
() -> privateClient.send("{\"method\":\"PING\"}"), 10, 20, TimeUnit.SECONDS
);
}
}
Loading