| | |
| | | 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; |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * 管理多个OKX WebSocket客户端实例,每个实例对应一个账号 |
| | | * 管理 Gate WebSocket 客户端和网格交易服务实例 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | |
| | | private WangGeListService wangGeListService; |
| | | |
| | | private GateKlineWebSocketClient klinePriceClient; |
| | | private GateGridTradeService gridTradeService; |
| | | |
| | | private static final String API_KEY = "d90ca272391992b8e74f8f92cedb21ec"; |
| | | private static final String API_SECRET = "1861e4f52de4bb53369ea3208d9ede38ece4777368030f96c77d27934c46c274"; |
| | | |
| | | /** |
| | | * 初始化方法,在Spring Bean构造完成后执行 |
| | | * 创建并初始化所有账号的WebSocket客户端实例 |
| | | */ |
| | | @PostConstruct |
| | | public void init() { |
| | | log.info("开始初始化OkxWebSocketClientManager"); |
| | | |
| | | // 初始化价格WebSocket客户端 |
| | | log.info("开始初始化GateWebSocketClientManager"); |
| | | |
| | | try { |
| | | gridTradeService = new GateGridTradeService( |
| | | API_KEY, API_SECRET, |
| | | "XAUT_USDT", |
| | | "100", |
| | | "cross", |
| | | "dual", |
| | | new BigDecimal("0.0035"), |
| | | new BigDecimal("0.5"), |
| | | 3, |
| | | new BigDecimal("7.5"), |
| | | "10" |
| | | ); |
| | | gridTradeService.init(); |
| | | |
| | | klinePriceClient = new GateKlineWebSocketClient(caoZuoService, this, wangGeListService); |
| | | klinePriceClient.setGridTradeService(gridTradeService); |
| | | klinePriceClient.init(); |
| | | log.info("已初始化OkxNewPriceWebSocketClient"); |
| | | log.info("已初始化GateKlineWebSocketClient"); |
| | | |
| | | gridTradeService.startGrid(); |
| | | } catch (Exception e) { |
| | | log.error("初始化OkxNewPriceWebSocketClient失败", e); |
| | | log.error("初始化GateWebSocketClientManager失败", e); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 销毁方法,在Spring Bean销毁前执行 |
| | | * 关闭所有WebSocket客户端连接和相关资源 |
| | | */ |
| | | @PreDestroy |
| | | public void destroy() { |
| | | log.info("开始销毁OkxWebSocketClientManager"); |
| | | |
| | | // 关闭价格WebSocket客户端 |
| | | log.info("开始销毁GateWebSocketClientManager"); |
| | | |
| | | if (gridTradeService != null) { |
| | | gridTradeService.stopGrid(); |
| | | } |
| | | if (klinePriceClient != null) { |
| | | try { |
| | | klinePriceClient.destroy(); |
| | | log.info("已销毁OkxNewPriceWebSocketClient"); |
| | | log.info("已销毁GateKlineWebSocketClient"); |
| | | } catch (Exception e) { |
| | | log.error("销毁OkxNewPriceWebSocketClient失败", e); |
| | | log.error("销毁GateKlineWebSocketClient失败", e); |
| | | } |
| | | } |
| | | |
| | | log.info("OkxWebSocketClientManager销毁完成"); |
| | | |
| | | log.info("GateWebSocketClientManager销毁完成"); |
| | | } |
| | | |
| | | /** |
| | | * 获取OkxNewPriceWebSocketClient实例 |
| | | * @return 价格WebSocket客户端实例 |
| | | */ |
| | | public GateKlineWebSocketClient getKlineWebSocketClient() { |
| | | return klinePriceClient; |
| | | } |
| | | |
| | | public GateGridTradeService getGridTradeService() { |
| | | return gridTradeService; |
| | | } |
| | | } |