增加阿里云推送和websocket
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.mir4updater.backend.service;
|
||||
|
||||
import jakarta.websocket.OnClose;
|
||||
import jakarta.websocket.OnMessage;
|
||||
import jakarta.websocket.OnOpen;
|
||||
import jakarta.websocket.Session;
|
||||
import jakarta.websocket.server.PathParam;
|
||||
import jakarta.websocket.server.ServerEndpoint;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Component
|
||||
@ServerEndpoint("/websocket/{terminalId}")
|
||||
public class WebSocketService {
|
||||
private static final Map<String, Session> CLIENTS = new ConcurrentHashMap<>();
|
||||
|
||||
public static Logger logger = LogManager.getLogger(WebSocketService.class);
|
||||
|
||||
@OnOpen
|
||||
public void onOpen(@PathParam("terminalId") String terminalId, Session session) {
|
||||
if (CLIENTS.containsKey(terminalId)) {
|
||||
try {
|
||||
CLIENTS.get(terminalId).close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
CLIENTS.put(terminalId, session);
|
||||
logger.info(session.getId());
|
||||
logger.info("终端 {} 已连接,当前在线数:{}", terminalId, CLIENTS.size());
|
||||
}
|
||||
|
||||
@OnClose
|
||||
public void onClose(@PathParam("terminalId") String terminalId, Session session) {
|
||||
CLIENTS.remove(terminalId);
|
||||
logger.info(session.getId());
|
||||
logger.info("终端 {} 已断开", terminalId);
|
||||
}
|
||||
|
||||
@OnMessage
|
||||
public void onMessage(String message, Session session) {
|
||||
logger.info(session.getId());
|
||||
logger.info("收到消息:{}", message);
|
||||
}
|
||||
|
||||
// 推送消息方法
|
||||
public static void sendMessage(String terminalId, String message) {
|
||||
Session session = CLIENTS.get(terminalId);
|
||||
if (session != null && session.isOpen()) {
|
||||
session.getAsyncRemote().sendText(message); // 异步发送避免阻塞
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendMessageAll(String message) {
|
||||
for (Map.Entry<String, Session> entry : CLIENTS.entrySet()) {
|
||||
Session session = entry.getValue();
|
||||
if (session != null && session.isOpen()) {
|
||||
session.getAsyncRemote().sendText(message); // 异步发送避免阻塞
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user