//package top.baogutang.admin.handlers;
//
//import com.binance.connector.client.WebSocketStreamClient;
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//import org.springframework.web.socket.*;
//import top.baogutang.common.utils.JacksonUtil;
//
//import javax.annotation.Resource;
//import java.io.IOException;
//import java.io.Serializable;
//import java.util.Map;
//import java.util.Objects;
//import java.util.concurrent.ConcurrentHashMap;
//
//@Slf4j
//@Component
//public class KlineWebSocketHandler implements WebSocketHandler {
//
//    @Resource
//    private WebSocketStreamClient webSocketStreamClient;
//
//    private final Map<String, WebSocketSession> webSocketMap = new ConcurrentHashMap<>();
//
//    private volatile Integer connectionId;
//
//    @Override
//    public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
//        //连接成功时调用该方法
//        log.info(">>>>>>>>>>WebSocket connected:{}<<<<<<<<<<", webSocketSession.getId());
//        webSocketMap.put(webSocketSession.getId(), webSocketSession);
//    }
//
//    @Override
//    public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
//        // 获取客户端发送的消息
//        log.info(">>>>>>>>>>客户端ID:{} 发送消息:{}<<<<<<<<<<", webSocketSession.getId(), webSocketMessage.getPayload());
//        KlineMessage message = JacksonUtil.fromJson(webSocketMessage.getPayload().toString(), KlineMessage.class);
//        if (Objects.nonNull(connectionId)) {
//            webSocketStreamClient.closeConnection(connectionId);
//        }
//        // 使用 Binance Connector 开启 WebSocket 连接
//        connectionId = webSocketStreamClient.klineStream(message.getSymbol(), message.getInterval(), event -> {
//            log.info(">>>>>>>>>>binance event:{}<<<<<<<<<<", event);
//            // 将从 Binance 接收到的数据转发给前端
//            TextMessage textMessage = new TextMessage(event);
//
//            // 推送消息给所有连接的客户端
//            webSocketMap.entrySet()
//                    .stream()
//                    .filter(entry -> entry.getValue().isOpen())
//                    .forEach(entry -> {
//                        try {
//                            entry.getValue().sendMessage(textMessage);
//                        } catch (IOException e) {
//                            log.error(">>>>>>>>>>消息发送错误:{}<<<<<<<<<<", e.getMessage(), e);
//                        }
//                    });
//        });
//        log.info(">>>>>>>>>启动了 Binance WebSocket 连接: {} , 监控交易对: {} 时间间隔: {}<<<<<<<<", connectionId, message.getSymbol(), message.getInterval());
//    }
//
//    @Override
//    public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
//        //发生错误时调用该方法
//        log.error(">>>>>>>>>>WebSocket error: {}<<<<<<<<<<", throwable.getMessage(), throwable);
//        webSocketSession.close(CloseStatus.SERVER_ERROR);
//        webSocketMap.remove(webSocketSession.getId());
//    }
//
//    @Override
//    public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
//        //连接关闭时调用该方法
//        log.info(">>>>>>>>>>WebSocket closed:{}<<<<<<<<<<", webSocketSession.getId());
//        webSocketMap.remove(webSocketSession.getId());
//        if (CollectionUtils.isEmpty(webSocketMap)) {
//            log.info(">>>>>>>>>>client session all closed!<<<<<<<<<<");
//            webSocketStreamClient.closeAllConnections();
//        }
//    }
//
//    @Override
//    public boolean supportsPartialMessages() {
//        return false;
//    }
//
//    @Data
//    public static class KlineMessage implements Serializable {
//
//        private static final long serialVersionUID = -3288071423561766084L;
//
//        private String symbol;
//
//        private String interval;
//    }
//}
