package com.xcong.excoin.modules.okxApi.wsHandler; import com.alibaba.fastjson.JSONObject; import org.java_websocket.client.WebSocketClient; /** * OKX WebSocket 频道处理器接口。 * *

定位

* 每个 OKX 频道对应一个实现类。新增频道只需实现此接口, * 然后通过 {@code OkxKlineWebSocketClient.addPublicHandler()} 或 * {@code addPrivateHandler()} 注册即可。 * *

与 Gate 版本的区别

* OKX 的公开频道和私有频道使用不同的 WebSocket 端点(public/private), * 订阅格式为 {@code {"op":"subscribe","args":[{"channel":"candle1m","instId":"ETH-USDT-SWAP"}]}}, * 与 Gate 的 {@code event/payload} 格式不同。 * *

实现类

* * *

OKX 订阅确认格式

* {@code {"event":"subscribe","arg":{"channel":"candle1m"}}} 表示订阅成功。 * *

OKX 数据推送格式

* {@code {"arg":{"channel":"positions","instType":"SWAP"},"data":[...]}}。 * * @author Administrator */ public interface OkxChannelHandler { /** * 频道名称,如 {@code "candle1m"}、{@code "positions"}、{@code "orders-algo"}。 * * @return OKX 频道标识字符串 */ String getChannelName(); /** * 交易对标识,如 {@code "ETH-USDT-SWAP"}。 * OKX 订阅需要 instId 参数来指定订阅的交易对。 * * @return OKX 格式的交易对标识 */ String getInstId(); /** * 发送订阅请求到指定的 WebSocket 连接。 * *

公开频道格式

*
     * {"op":"subscribe","args":[{"channel":"candle1m","instId":"ETH-USDT-SWAP"}]}
     * 
* *

私有频道格式

*
     * {"op":"subscribe","args":[{"channel":"positions","instType":"SWAP"}]}
     * 
* * @param ws 目标 WebSocket 客户端(公开或私有端点) */ void subscribe(WebSocketClient ws); /** * 发送取消订阅请求到指定的 WebSocket 连接。 * * @param ws 目标 WebSocket 客户端 */ void unsubscribe(WebSocketClient ws); /** * 处理频道推送消息。 * *

路由规则

* 如果消息的 {@code arg.channel} 匹配当前处理器的频道名, * 则提取 {@code data} 数组并处理业务逻辑,返回 {@code true}; * 否则返回 {@code false}(让路由器继续遍历其他 handler)。 * * @param response WebSocket 推送的完整 JSON * @return true 表示已处理(循环停止),false 表示频道不匹配(继续遍历下一个 handler) */ boolean handleMessage(JSONObject response); /** * 是否已收到订阅成功确认(即收到 {@code event:"subscribe"} 响应)。 * * @return true 表示订阅已确认 */ boolean isSubscribed(); /** * 标记订阅已确认/未确认。 * * @param subscribed true=已确认,false=未确认 */ void setSubscribed(boolean subscribed); }