package kr.wisestone.owl.config.websocket; import com.google.gson.Gson; import kr.wisestone.owl.util.MapUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @Service public class WebSocketService { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisPublisher redisPublisher; @Value("${redis.common.topic}") private String redisCommonTopic; public void checkActiveUser() { Map totalActiveUserMap = this.checkExpireWebSocketSession(); Gson gson = new Gson(); Map responseMap = new HashMap<>(); responseMap.put("url", "/session/user-list"); responseMap.put("message", gson.toJson(totalActiveUserMap)); ChannelTopic channelTopic = new ChannelTopic(this.redisCommonTopic); this.redisPublisher.publish(channelTopic, responseMap); } private Map checkExpireWebSocketSession() { Map totalActiveUserMap = new HashMap<>(); Gson gson = new Gson(); String loginUsers = this.stringRedisTemplate.opsForValue().get("activeUsers"); if (!StringUtils.isEmpty(loginUsers)) { totalActiveUserMap = (Map)gson.fromJson(loginUsers, Object.class); Iterator iterator = totalActiveUserMap.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); Map userMap = (Map)totalActiveUserMap.get(key); Long sessionActiveTime = Long.valueOf(MapUtil.getString(userMap, "sessionActiveTime")); if (System.currentTimeMillis() - sessionActiveTime >= 60000) { iterator.remove(); } } } return totalActiveUserMap; } }