package com.xcong.excoin.modules.gateApi.wsHandler.handler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.modules.blackchain.service.DateUtil; import com.xcong.excoin.modules.gateApi.GateGridTradeService; import com.xcong.excoin.modules.gateApi.wsHandler.GateChannelHandler; import lombok.extern.slf4j.Slf4j; import org.java_websocket.client.WebSocketClient; import java.math.BigDecimal; /** * K 线(Candlestick)频道处理器。 * *
* WebSocket 推送 update event * → handleMessage() → 解析 OHLCV → log 打印 → gridTradeService.onKline(closePx) * → WAITING_KLINE: 首次 K 线触发基底双开 * → ACTIVE: 驱动 processShortGrid + processLongGrid 网格触发 ** *
* {
* "time": <unix时间戳(秒)>,
* "channel": "futures.candlesticks",
* "event": "subscribe",
* "payload": ["1m", "{contract}"]
* }
*
*/
@Override
public void subscribe(WebSocketClient ws) {
JSONObject msg = new JSONObject();
msg.put("time", System.currentTimeMillis() / 1000);
msg.put("channel", CHANNEL_NAME);
msg.put("event", "subscribe");
JSONArray payload = new JSONArray();
payload.add(INTERVAL);
payload.add(contract);
msg.put("payload", payload);
ws.send(msg.toJSONString());
log.info("[{}] 订阅成功, 合约:{}, 周期:{}", CHANNEL_NAME, contract, INTERVAL);
}
/**
* 发送 K 线频道取消订阅请求。
*/
@Override
public void unsubscribe(WebSocketClient ws) {
JSONObject msg = new JSONObject();
msg.put("time", System.currentTimeMillis() / 1000);
msg.put("channel", CHANNEL_NAME);
msg.put("event", "unsubscribe");
JSONArray payload = new JSONArray();
payload.add(INTERVAL);
payload.add(contract);
msg.put("payload", payload);
ws.send(msg.toJSONString());
log.info("[{}] 取消订阅成功", CHANNEL_NAME);
}
/**
* 处理 K 线推送消息。
*
*