package com.xcong.excoin.modules.okxApi.wsHandler.handler;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.xcong.excoin.modules.okxApi.OkxGridTradeService;
|
import com.xcong.excoin.modules.okxApi.OkxWsUtil;
|
import com.xcong.excoin.modules.okxApi.enums.OkxEnums;
|
import com.xcong.excoin.modules.okxApi.wsHandler.OkxChannelHandler;
|
import lombok.extern.slf4j.Slf4j;
|
import org.java_websocket.client.WebSocketClient;
|
|
import java.math.BigDecimal;
|
|
@Slf4j
|
public class OkxCandlestickChannelHandler implements OkxChannelHandler {
|
|
private final String instId;
|
private final OkxGridTradeService gridTradeService;
|
|
public OkxCandlestickChannelHandler(String instId, OkxGridTradeService gridTradeService) {
|
this.instId = instId;
|
this.gridTradeService = gridTradeService;
|
}
|
|
@Override
|
public String getChannelName() {
|
return OkxEnums.CHANNEL_CANDLE;
|
}
|
|
@Override
|
public void subscribe(WebSocketClient ws) {
|
JSONObject msg = new JSONObject();
|
msg.put("op", "subscribe");
|
JSONArray args = new JSONArray();
|
JSONObject arg = new JSONObject();
|
arg.put("channel", OkxEnums.CHANNEL_CANDLE);
|
arg.put("instId", instId);
|
args.add(arg);
|
msg.put("args", args);
|
ws.send(msg.toJSONString());
|
log.info("[{}] 订阅成功, 合约:{}, 周期:1m", OkxEnums.CHANNEL_CANDLE, instId);
|
}
|
|
@Override
|
public void unsubscribe(WebSocketClient ws) {
|
JSONObject msg = new JSONObject();
|
msg.put("op", "unsubscribe");
|
JSONArray args = new JSONArray();
|
JSONObject arg = new JSONObject();
|
arg.put("channel", OkxEnums.CHANNEL_CANDLE);
|
arg.put("instId", instId);
|
args.add(arg);
|
msg.put("args", args);
|
ws.send(msg.toJSONString());
|
log.info("[{}] 取消订阅成功", OkxEnums.CHANNEL_CANDLE);
|
}
|
|
@Override
|
public boolean handleMessage(JSONObject response) {
|
JSONObject argObj = response.getJSONObject("arg");
|
if (argObj == null) {
|
return false;
|
}
|
String channel = argObj.getString("channel");
|
if (!OkxEnums.CHANNEL_CANDLE.equals(channel)) {
|
return false;
|
}
|
String msgInstId = argObj.getString("instId");
|
if (!instId.equals(msgInstId)) {
|
return false;
|
}
|
try {
|
JSONArray dataArray = response.getJSONArray("data");
|
if (dataArray == null || dataArray.isEmpty()) {
|
log.warn("[{}] 数据为空", OkxEnums.CHANNEL_CANDLE);
|
return true;
|
}
|
JSONArray data = dataArray.getJSONArray(0);
|
BigDecimal closePx = new BigDecimal(data.getString(4));
|
String time = OkxWsUtil.timestampToDateTime(Long.parseLong(data.getString(0)));
|
String confirm = data.getString(8);
|
|
log.info("[{}] 收盘:{}, 时间:{}, 完结:{}", OkxEnums.CHANNEL_CANDLE, closePx, time, "1".equals(confirm));
|
|
if (gridTradeService != null) {
|
gridTradeService.onKline(closePx);
|
}
|
} catch (Exception e) {
|
log.error("[{}] 处理数据失败", OkxEnums.CHANNEL_CANDLE, e);
|
}
|
return true;
|
}
|
}
|