|
@@ -1,149 +0,0 @@
|
|
|
-package com.persagy.apm.energyalarmstarter.collectdata.websocket;
|
|
|
-
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-
|
|
|
-import javax.websocket.Session;
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Set;
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
-import java.util.concurrent.CopyOnWriteArraySet;
|
|
|
-
|
|
|
-/**
|
|
|
- * @description: webSocket缓存,存储通信session
|
|
|
- * @author: lixing
|
|
|
- * @company: Persagy Technology Co.,Ltd
|
|
|
- * @since: 2020/11/30 7:07 下午
|
|
|
- * @version: V1.0
|
|
|
- */
|
|
|
-public class AlarmWebSocketCache {
|
|
|
- /**
|
|
|
- * 所有项目的标志
|
|
|
- */
|
|
|
- public static final String allProjects = "allProjects";
|
|
|
- /**
|
|
|
- * 所有在线的客户端
|
|
|
- */
|
|
|
- private static Map<String, Session> clients = new ConcurrentHashMap<>();
|
|
|
-
|
|
|
- /**
|
|
|
- * @description: 根据项目获取通道
|
|
|
- * @param: projectId
|
|
|
- * @return: java.util.Set<java.lang.String>
|
|
|
- * @exception:
|
|
|
- * @author: lixing
|
|
|
- * @company: Persagy Technology Co.,Ltd
|
|
|
- * @since: 2020/12/3 2:56 下午
|
|
|
- * @version: V1.0
|
|
|
- */
|
|
|
- public static Set<String> getProjectSessionIds(String projectId) {
|
|
|
- // 如果多个边缘端配置的projectId有重复,这里不知道报警定义到底发送到了哪个边缘端,所以这里发消息要发给所有边缘端。
|
|
|
- Set<String> resultSet = new HashSet<>();
|
|
|
- synchronized (resultSet) {
|
|
|
- // 结果集中一定包含接收所有项目消息的通道
|
|
|
- if (projectSessionIds.get(AlarmWebSocketCache.allProjects) != null) {
|
|
|
- resultSet.addAll(projectSessionIds.get(AlarmWebSocketCache.allProjects));
|
|
|
- }
|
|
|
- if (StringUtils.isNotEmpty(projectId)) {
|
|
|
- if (projectSessionIds.get(projectId) != null) {
|
|
|
- resultSet.addAll(projectSessionIds.get(projectId));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return resultSet;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 所有在线的客户端
|
|
|
- * projectId:<sessionId1,sessionId2>
|
|
|
- */
|
|
|
- private static Map<String, Set<String>> projectSessionIds = new ConcurrentHashMap<>();
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取连接中的所有客户端
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Session getClient(String sessionId) {
|
|
|
- return clients.get(sessionId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取连接中的所有客户端
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static Map<String, Session> getClients() {
|
|
|
- return clients;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 增加客户端
|
|
|
- *
|
|
|
- * @param session
|
|
|
- */
|
|
|
- public static void addClient(String projectIdStr, Session session) {
|
|
|
- if (StringUtils.isEmpty(projectIdStr)) {
|
|
|
- addProjectSessionId(allProjects, session.getId());
|
|
|
- } else {
|
|
|
- String[] projectIds = projectIdStr.split(",");
|
|
|
- for (String projectId : projectIds) {
|
|
|
- addProjectSessionId(projectId, session.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- clients.put(session.getId(), session);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @description: 将sessionId添加到项目下
|
|
|
- * @param: projectId
|
|
|
- * @param: session
|
|
|
- * @return: void
|
|
|
- * @exception:
|
|
|
- * @author: lixing
|
|
|
- * @company: Persagy Technology Co.,Ltd
|
|
|
- * @since: 2020/12/2 6:25 下午
|
|
|
- * @version: V1.0
|
|
|
- */
|
|
|
- private static void addProjectSessionId(String projectId, String sessionId) {
|
|
|
- Set<String> sessionIds = projectSessionIds.getOrDefault(projectId, new CopyOnWriteArraySet());
|
|
|
- sessionIds.add(sessionId);
|
|
|
- projectSessionIds.put(projectId, sessionIds);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @description: 将sessionId从项目下移除
|
|
|
- * @param: projectId
|
|
|
- * @param: session
|
|
|
- * @return: void
|
|
|
- * @exception:
|
|
|
- * @author: lixing
|
|
|
- * @company: Persagy Technology Co.,Ltd
|
|
|
- * @since: 2020/12/2 6:25 下午
|
|
|
- * @version: V1.0
|
|
|
- */
|
|
|
- private static void removeProjectSessionId(String projectId, String sessionId) {
|
|
|
- Set<String> sessionIds = projectSessionIds.getOrDefault(projectId, new CopyOnWriteArraySet());
|
|
|
- sessionIds.remove(sessionId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除客户端
|
|
|
- *
|
|
|
- * @param sessionId 客户端标识
|
|
|
- */
|
|
|
- public static void removeClient(String projectIdStr, String sessionId) {
|
|
|
- if (StringUtils.isEmpty(projectIdStr)) {
|
|
|
- removeProjectSessionId(allProjects, sessionId);
|
|
|
- } else {
|
|
|
- String[] projectIds = projectIdStr.split(",");
|
|
|
- for (String projectId : projectIds) {
|
|
|
- removeProjectSessionId(projectId, sessionId);
|
|
|
- }
|
|
|
- }
|
|
|
- clients.remove(sessionId);
|
|
|
- }
|
|
|
-
|
|
|
-}
|