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<String, Object> totalActiveUserMap = this.checkExpireWebSocketSession();
|
Gson gson = new Gson();
|
Map<String, Object> 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<String, Object> checkExpireWebSocketSession() {
|
Map<String, Object> totalActiveUserMap = new HashMap<>();
|
Gson gson = new Gson();
|
String loginUsers = this.stringRedisTemplate.opsForValue().get("activeUsers");
|
|
if (!StringUtils.isEmpty(loginUsers)) {
|
totalActiveUserMap = (Map<String, Object>)gson.fromJson(loginUsers, Object.class);
|
|
Iterator<String> iterator = totalActiveUserMap.keySet().iterator();
|
|
while (iterator.hasNext()) {
|
String key = iterator.next();
|
Map<String, Object> userMap = (Map<String, Object>)totalActiveUserMap.get(key);
|
|
Long sessionActiveTime = Long.valueOf(MapUtil.getString(userMap, "sessionActiveTime"));
|
|
if (System.currentTimeMillis() - sessionActiveTime >= 60000) {
|
iterator.remove();
|
}
|
}
|
}
|
|
return totalActiveUserMap;
|
}
|
}
|