1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package com.gyee.alarm.stomp;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
- import org.springframework.messaging.simp.SimpMessageType;
- import org.springframework.messaging.simp.SimpMessagingTemplate;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.Random;
- import java.util.concurrent.atomic.AtomicInteger;
- @Service
- public class PushService {
- private final AtomicInteger broadcastCounter = new AtomicInteger(0);
- private final AtomicInteger privateCounter = new AtomicInteger(0);
- @Resource
- private SimpMessagingTemplate messagingTemplate;
- @Resource
- private WebSocketSessionManager sessionManager;
- // 每3秒群发一次消息
- @Scheduled(fixedRate = 3000)
- public void broadcastData() {
- String content = "系统广播 #" + broadcastCounter.incrementAndGet() +
- " | 时间: " + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME);
- PushMessage msg = new PushMessage(content, "BROADCAST", "SERVER");
- messagingTemplate.convertAndSend("/topic/public", msg);
- }
- // 每5秒随机选择一个用户发送私信
- @Scheduled(fixedRate = 5000)
- public void sendRandomPrivateMessage() {
- String randomUser = "user1";
- String content = "系统私信 #" + privateCounter.incrementAndGet() +
- " | 仅您可见";
- PushMessage msg = new PushMessage(content, "PRIVATE", "SERVER", randomUser);
- if(sessionManager.getUserSessionMap().containsKey(randomUser))
- {
- String sessionId = sessionManager.getUserSessionMap().get(randomUser);
- SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
- headerAccessor.setSessionId(sessionId);
- // headerAccessor.setLeaveMutable(true);
- messagingTemplate.convertAndSendToUser(
- sessionId,
- "/queue/private",
- msg, headerAccessor.getMessageHeaders()
- );
- }
- }
- // 群发消息方法
- public void sendBroadcast(String content) {
- PushMessage msg = new PushMessage(content, "BROADCAST", "ADMIN");
- messagingTemplate.convertAndSend("/topic/public", msg);
- }
- // 单独发送消息方法
- public void sendPrivateMessage(String userId, String content) {
- PushMessage msg = new PushMessage(content, "PRIVATE", "ADMIN", userId);
- messagingTemplate.convertAndSendToUser(userId, "/queue/private", msg);
- }
- }
|