| | |
| | | package com.ard.sample.component.websocket.handler; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ard.sample.component.websocket.enums.MessageType; |
| | | import com.ard.sample.component.websocket.model.Payload; |
| | | import com.ard.sample.component.websocket.model.WebSocketMessage; |
| | | import org.checkerframework.checker.units.qual.A; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.socket.CloseStatus; |
| | | import org.springframework.web.socket.TextMessage; |
| | |
| | | |
| | | @Component |
| | | public class DockWebSocketHandler extends TextWebSocketHandler { |
| | | |
| | | @Autowired |
| | | private LiveStreamHandler _liveStreamService; |
| | | |
| | | // 存储用户会话:userId -> WebSocketSession |
| | | private final Map<String, WebSocketSession> userSessions = new ConcurrentHashMap<>(); |
| | |
| | | Payload payload = webSocketMessage.getPayload(); |
| | | |
| | | // 验证消息类型是否合法 |
| | | if (!Arrays.asList("status", "control", "progress").contains(type)) { |
| | | //if (!Arrays.asList("status", "control", "progress", "state").contains(type)) { |
| | | if(!MessageType.fromString(type)){ |
| | | session.sendMessage(new TextMessage("不支持的消息类型:" + type)); |
| | | return; |
| | | } |
| | | |
| | | // 处理订阅/取消订阅 |
| | | handleSubscription(userId, type, payload); |
| | | |
| | |
| | | // 订阅操作 |
| | | subscriptions.computeIfAbsent(subscriptionKey, k -> ConcurrentHashMap.newKeySet()).add(userId); |
| | | System.out.println("用户[" + userId + "]订阅了 设备[" + sn + "]的[" + type + "]类型消息"); |
| | | if(MessageType.LIVESTREAM.getType().equals(type)){ |
| | | // 开启直播 |
| | | // 开启直播逻辑 |
| | | System.out.println("开启直播"); |
| | | _liveStreamService.StartLiveStreaming(sn); |
| | | } |
| | | } else { |
| | | // 停止直播 |
| | | if(MessageType.LIVESTREAM.getType().equals(type)){ |
| | | System.out.println("停止直播"); |
| | | _liveStreamService.StopLiveStreaming(sn); |
| | | } |
| | | // 取消订阅操作 |
| | | if (subscriptions.containsKey(subscriptionKey)) { |
| | | subscriptions.get(subscriptionKey).remove(userId); |