Files
youlai-boot/src/main/java/com/youlai/system/service/impl/WebsocketServiceImpl.java
Kylin f7a3e2cf5b feat: 新建消息通知后端部分的
新建根据websocket的后端部分代码.其中包含sql数据库文件
2024-08-27 17:51:53 +08:00

59 lines
1.8 KiB
Java

package com.youlai.system.service.impl;
import com.youlai.system.event.UserConnectionEvent;
import com.youlai.system.service.WebsocketService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@Service
@Slf4j
@RequiredArgsConstructor
public class WebsocketServiceImpl implements WebsocketService {
private final SimpMessagingTemplate messagingTemplate;
private final Set<String> onlineUsers = ConcurrentHashMap.newKeySet();
@Override
public void addUser(String username) {
onlineUsers.add(username);
}
@Override
public void removeUser(String username) {
onlineUsers.remove(username);
}
@EventListener
public void handleUserConnectionEvent(UserConnectionEvent event) {
String username = event.getUsername();
if (event.isConnected()) {
onlineUsers.add(username);
log.info("User connected: {}", username);
} else {
onlineUsers.remove(username);
log.info("User disconnected: {}", username);
}
// 推送在线用户人数
messagingTemplate.convertAndSend("/topic/onlineUserCount", onlineUsers.size());
}
@Scheduled(fixedRate = 5000)
public void sendOnlineUserCount() {
messagingTemplate.convertAndSend("/topic/onlineUserCount", onlineUsers.size());
}
@Override
public void sendStringToFrontend(String message) {
messagingTemplate.convertAndSend("/topic/chat", message);
}
}