-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathContractWebSocket.java
More file actions
77 lines (66 loc) · 2.5 KB
/
Copy pathContractWebSocket.java
File metadata and controls
77 lines (66 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.bitmart.websocket;
import com.bitmart.api.common.CloudException;
import com.bitmart.api.common.JsonUtils;
import com.bitmart.api.key.CloudKey;
import com.bitmart.api.key.CloudSignature;
import com.bitmart.websocket.contract.ActionParam;
import com.google.common.collect.ImmutableList;
import io.netty.channel.Channel;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Timer;
import java.util.TimerTask;
public class ContractWebSocket extends WebSocketClient{
private static final Logger log = LoggerFactory.getLogger(ContractWebSocket.class);
public ContractWebSocket(String url, WebSocketCallBack callBack) throws CloudException {
super(url, null, callBack);
this.isSpot = false;
}
public ContractWebSocket(String url, CloudKey cloudKey, WebSocketCallBack callBack) throws CloudException {
super(url, cloudKey, callBack);
this.isSpot = false;
}
@Override
public void login() throws CloudException {
this.reconnectionUseLogin = true;
CloudSignature.Signature signature = CloudSignature.create(
"bitmart.WebSocket",
this.cloudKey.getApiSecret(),
this.cloudKey.getMemo());
ActionParam actionParam = new ActionParam().setAction("access").setArgs(ImmutableList.of(
this.cloudKey.getApiKey(),
signature.getTimestamp(),
signature.getSign(),
"web"
));
String param = JsonUtils.toJson(actionParam);
if (log.isDebugEnabled()) {
log.debug("WebSocket Client Send:{}", param);
}
this.clientChannel.writeAndFlush(new TextWebSocketFrame(param));
// Waiting for login result
try {
Thread.sleep(2000L);
} catch (InterruptedException e) { }
}
public void send(ActionParam actionParam) {
String param = JsonUtils.toJson(actionParam);
if (log.isDebugEnabled()) {
log.debug("WebSocket Client Send:{}", param);
}
send(param);
}
@Override
void keepalive() {
Channel channel = this.clientChannel;
new Timer("WebSocket-Keepalive").schedule(new TimerTask() {
@Override
public void run() {
if (channel.isActive()) {
channel.writeAndFlush(new TextWebSocketFrame("{\"action\":\"ping\"}"));
}
}
}, 2000, 10000);
}
}