无关风月
2024-09-03 56dfe0d4bf81262622a1919cceb2b039fd356209
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java
@@ -19,12 +19,12 @@
    private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketUsers.class);
    private static Map<String, Session> USERS = new ConcurrentHashMap<>();
    private static Map<String, Integer> USER_TYPES = new ConcurrentHashMap<>();
    private static Map<String, String> USER_TYPES = new ConcurrentHashMap<>();
    public static void put(String key, Session session, Integer clientType)
    public static void put(String userId, Session session)
    {
        USERS.put(key, session);
        USER_TYPES.put(key, clientType);
        USERS.put(userId, session);
        USER_TYPES.put(userId, session.getId());
    }
    public static boolean remove(Session session)
@@ -73,7 +73,7 @@
        return USERS;
    }
    public static Integer getUserType(String key) {
    public static String getUserType(String key) {
        return USER_TYPES.get(key);
    }
@@ -83,6 +83,21 @@
        for (Session value : values) {
            sendMessageToUserByText(value, message);
        }
        //if (userId.equals(USER_TYPES.get(key))) {
        //            sendMessageToUserByText(value, message);
        //        }
        //        for (Session value : values) {
        //            sendMessageToUsersById(userId, message);
        //
        //        }
    }
    public static void sendMessageToUsersByUserId(String message,String userId)
    {
        // 遍历map集合USERS 如果key和userId相同 那么将消息推送给他
        USERS.entrySet().stream()
                .filter(entry -> userId.equals(entry.getKey()))
                .forEach(entry -> sendMessageToUserByText(entry.getValue(), message));
    }
    public static void sendMessageToUserByText(Session session, String message)
@@ -119,4 +134,19 @@
            }
        }
    }
    /**
     * 根据用户id发送消息
     *
     * @param userId 用户id
     * @param message    发送的消息
     */
    public static void sendMessageToUsersById(String userId, String message) {
        for (Map.Entry<String, Session> entry : USERS.entrySet()) {
            String key = entry.getKey();
            Session session = entry.getValue();
            if (userId.equals(USER_TYPES.get(key))) {
                sendMessageToUserByText(session, message);
            }
        }
    }
}