liusuyi
2024-08-12 91b70d5ad2ada85cf00b25f7b9ecd9cf980bf138
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.ruoyi.call.listener;
 
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.call.dto.CallMessage;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
/**
 * 处理websocket消息处理视频通话消息
 *
 * @author liusuyi
 * @date 2024年08月12日15:56
 **/
public class WebsocketHandler {
    public static void handleMessage(String userId, String message) {
        try {
            Map<String, Object> messageMap = JSONObject.parseObject(message, Map.class);
            if (messageMap.get("type") != null && messageMap.get("type").equals("callMessage")) {
                String msg = (String) messageMap.get("message");
                CallMessage callMessage = JSONObject.parseObject(msg, CallMessage.class);
                //单聊
                if (callMessage != null && callMessage.getType().equals(0)) {
                    WebSocketUtils.sendMessagePrefix(callMessage.getTargetId(), message);
                }
                //群聊
                if (callMessage != null && callMessage.getType().equals(1)) {
                    String step = callMessage.getStep();
                    switch (step) {
                        case "joinRoom":
                            Set<String> userSet = WebSocketUtils.ROOM_USER_SET.getOrDefault(callMessage.getRoomId(), new HashSet<>());
                            userSet.add(callMessage.getUserId());
                            WebSocketUtils.ROOM_USER_SET.put(callMessage.getRoomId(), userSet);
                            WebSocketUtils.sendRoomMessage(callMessage.getRoomId(), message);
                            break;
                        case "inviteRoom":
                            List<String> targetIds = callMessage.getTargetIds();
                            targetIds.stream().forEach(targetId -> {
                                WebSocketUtils.sendMessagePrefix(targetId, message);
                            });
                            break;
                        case "leaveRoom":
                            userSet = WebSocketUtils.ROOM_USER_SET.getOrDefault(callMessage.getRoomId(), new HashSet<>());
                            if (userSet.size() > 0) {
                                userSet.remove(callMessage.getUserId());
                                WebSocketUtils.ROOM_USER_SET.put(callMessage.getRoomId(), userSet);
                                WebSocketUtils.sendRoomMessage(callMessage.getRoomId(), message);
                            }
                            break;
                        default:
                            WebSocketUtils.sendMessagePrefix(callMessage.getTargetId(), message);
                            break;
                    }
 
 
                }
            }
            else
            {
                WebSocketUtils.sendMessage(userId, "视频通话无法解析消息【" + message + "】");
            }
        } catch (Exception ex) {
            WebSocketUtils.sendMessage(userId, "视频通话解析消息【" + message + "】异常:" + ex.getMessage());
        }
    }
}