package com.xcong.excoin.modules.gateApi; import com.xcong.excoin.modules.okxNewPrice.OkxKlineWebSocketClient; import com.xcong.excoin.modules.okxNewPrice.OkxQuantWebSocketClient; import com.xcong.excoin.modules.okxNewPrice.celue.CaoZuoService; import com.xcong.excoin.modules.okxNewPrice.okxWs.enums.ExchangeInfoEnum; import com.xcong.excoin.modules.okxNewPrice.okxWs.wanggeList.WangGeListService; import com.xcong.excoin.utils.RedisUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 管理多个OKX WebSocket客户端实例,每个实例对应一个账号 */ @Slf4j @Component public class GateWebSocketClientManager { @Autowired private CaoZuoService caoZuoService; @Autowired private RedisUtils redisUtils; @Autowired private WangGeListService wangGeListService; private GateKlineWebSocketClient klinePriceClient; /** * 初始化方法,在Spring Bean构造完成后执行 * 创建并初始化所有账号的WebSocket客户端实例 */ @PostConstruct public void init() { log.info("开始初始化OkxWebSocketClientManager"); // 初始化价格WebSocket客户端 try { klinePriceClient = new GateKlineWebSocketClient(caoZuoService, this, wangGeListService); klinePriceClient.init(); log.info("已初始化OkxNewPriceWebSocketClient"); } catch (Exception e) { log.error("初始化OkxNewPriceWebSocketClient失败", e); } } /** * 销毁方法,在Spring Bean销毁前执行 * 关闭所有WebSocket客户端连接和相关资源 */ @PreDestroy public void destroy() { log.info("开始销毁OkxWebSocketClientManager"); // 关闭价格WebSocket客户端 if (klinePriceClient != null) { try { klinePriceClient.destroy(); log.info("已销毁OkxNewPriceWebSocketClient"); } catch (Exception e) { log.error("销毁OkxNewPriceWebSocketClient失败", e); } } log.info("OkxWebSocketClientManager销毁完成"); } /** * 获取OkxNewPriceWebSocketClient实例 * @return 价格WebSocket客户端实例 */ public GateKlineWebSocketClient getKlineWebSocketClient() { return klinePriceClient; } }