package com.gxwebsoft.common.core.socketio.cache; import com.corundumstudio.socketio.SocketIOClient; import com.corundumstudio.socketio.SocketIOServer; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; /** * @Author * @Description 用户信息缓存 * @Date 14:00 2022/1/21 * @Param * @return **/ @Component public class ClientCache { private static Map> concurrentHashMap = new ConcurrentHashMap<>(); private static SocketIOServer socketIOServer; public static SocketIOServer getSocketIOServer() { return socketIOServer; } public static void setSocketIOServer(SocketIOServer instance) { socketIOServer = instance; } public void saveClient(String userId,UUID sessionId,SocketIOClient socketIOClient){ HashMap sessionIdClientCache = concurrentHashMap.get(userId); if(sessionIdClientCache == null){ sessionIdClientCache = new HashMap<>(); } sessionIdClientCache.put(sessionId,socketIOClient); concurrentHashMap.put(userId,sessionIdClientCache); } public HashMap getUserClient(String userId){ return concurrentHashMap.get(userId); } public void deleteSessionClientByUserId(String userId,UUID sessionId){ concurrentHashMap.get(userId).remove(sessionId); } public void deleteUserCacheByUserId(String userId){ concurrentHashMap.remove(userId); } public int getOnLineCount(){ return concurrentHashMap.size(); } public void sendUserEvent(String userId,String event, Object message) { // 发送到接收方 HashMap userClient = concurrentHashMap.get(userId); // 查看对方是否在线 if(!CollectionUtils.isEmpty(userClient)){ for (UUID uuid : userClient.keySet()) { SocketIOClient ioClient = userClient.get(uuid); ioClient.sendEvent(event, message); } } } }