package com.xcong.excoin.modules.okxApi.wsHandler.handler; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.modules.okxApi.wsHandler.OkxChannelHandler; import lombok.extern.slf4j.Slf4j; import org.java_websocket.client.WebSocketClient; /** * OKX 账户频道处理器(account)。 * *

数据用途

* 监控账户余额和保证金信息。用于保证金安全阀检查。 * *

推送字段

* ccy, availBal, cashBal, eq, upl, imr, ordFroz * *

注意

* 当前版本仅做日志输出,后续可扩展保证金安全阀功能。 * * @author Administrator */ @Slf4j public class OkxAccountChannelHandler implements OkxChannelHandler { private static final String CHANNEL_NAME = "account"; private static final String CHANNEL = "account"; public OkxAccountChannelHandler() { } @Override public String getChannelName() { return CHANNEL_NAME; } @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", CHANNEL); args.add(arg); msg.put("args", args); ws.send(msg.toJSONString()); log.info("[{}] 订阅成功", CHANNEL_NAME); } @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", CHANNEL); args.add(arg); msg.put("args", args); ws.send(msg.toJSONString()); log.info("[{}] 取消订阅成功", CHANNEL_NAME); } @Override public boolean handleMessage(JSONObject response) { JSONObject argObj = response.getJSONObject("arg"); if (argObj == null) { return false; } String channel = argObj.getString("channel"); if (!CHANNEL.equals(channel)) { return false; } try { JSONArray dataArray = response.getJSONArray("data"); if (dataArray == null || dataArray.isEmpty()) { return true; } for (int i = 0; i < dataArray.size(); i++) { JSONObject acct = dataArray.getJSONObject(i); log.info("[{}] 账户更新, 可用余额:{}, 现金余额:{}, 权益:{}, 未实现盈亏:{}, 保证金:{}", CHANNEL_NAME, acct.get("availBal"), acct.get("cashBal"), acct.get("eq"), acct.get("upl"), acct.get("imr")); } } catch (Exception e) { log.error("[{}] 处理数据失败", CHANNEL_NAME, e); } return true; } }