Browse Source

feat:实现通知功能

tags/freeze
黄翔 3 months ago
parent
commit
243a1ad777
  1. 26
      src/main/java/com/iflytop/gd/common/controller/NotificationWebsocketEndpoint.java
  2. 61
      src/main/java/com/iflytop/gd/common/notification/Notification.java
  3. 31
      src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationMgrImpl.java
  4. 7
      src/main/java/com/iflytop/gd/system/modules/NotificationMgr.java
  5. 1
      src/main/java/com/iflytop/gd/system/modules/package-info.java

26
src/main/java/com/iflytop/gd/common/controller/NotificationWebsocketEndpoint.java

@ -0,0 +1,26 @@
package com.iflytop.gd.common.controller;
import com.iflytop.gd.infrastructure.modules.WebSocketNotificationMgrImpl;
import jakarta.annotation.Resource;
import jakarta.websocket.EndpointConfig;
import jakarta.websocket.OnOpen;
import jakarta.websocket.Session;
import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@ServerEndpoint(value = "/api/v1/ws/notifications")
@Slf4j
@Component
public class NotificationWebsocketEndpoint {
@Resource
private WebSocketNotificationMgrImpl notificationMgr;
@OnOpen
public void onOpen(Session session, EndpointConfig endpointConfig) {
// 保存 session 到对象
this.notificationMgr.addSession(session);
log.info("[websocket] 新的连接:id={}", session.getId());
}
}

61
src/main/java/com/iflytop/gd/common/notification/Notification.java

@ -0,0 +1,61 @@
package com.iflytop.gd.common.notification;
import cn.hutool.core.date.DateTime;
import lombok.Getter;
/**
* 向前台推送的消息类
*/
@Getter
public class Notification {
private final String level;
private final String content;
private final String dateTime = DateTime.now().toString("yyyy/MM/dd HH:mm:ss");
private Notification(String level, String content) {
this.level = level;
this.content = content;
}
/**
* 创建Info级别通知
* @param content 通知内容
* @return 通知实例
*/
public static Notification infoNotification(String content) {
return new Notification("info", content);
}
/**
* 创建Warn级别通知
* @param content 通知内容
* @return 通知实例
*/
public static Notification warnNotification(String content) {
return new Notification("warn", content);
}
/**
* 创建Error级别通知
* @param content 通知内容
* @return 通知实例
*/
public static Notification errorNotification(String content) {
return new Notification("error", content);
}
/**
* 创建Fatal级别通知
* @param content 通知内容
* @return 通知实例
*/
public static Notification fatalNotification(String content) {
return new Notification("fatal", content);
}
}

31
src/main/java/com/iflytop/gd/infrastructure/modules/WebSocketNotificationMgrImpl.java

@ -0,0 +1,31 @@
package com.iflytop.gd.infrastructure.modules;
import cn.hutool.json.JSONUtil;
import com.iflytop.gd.common.notification.Notification;
import com.iflytop.gd.system.modules.NotificationMgr;
import org.springframework.stereotype.Component;
import jakarta.websocket.Session;
import java.util.HashSet;
import java.util.Set;
@Component
public class WebSocketNotificationMgrImpl implements NotificationMgr {
private final Set<Session> sessions = new HashSet<>();
@Override
public void pushNotification(Notification notification) {
for (Session session : sessions) {
session.getAsyncRemote().sendText(JSONUtil.toJsonStr(notification));
}
}
/**
* 添加websocket session
* @param session
*/
public void addSession(Session session) {
sessions.add(session);
}
}

7
src/main/java/com/iflytop/gd/system/modules/NotificationMgr.java

@ -0,0 +1,7 @@
package com.iflytop.gd.system.modules;
import com.iflytop.gd.common.notification.Notification;
public interface NotificationMgr {
void pushNotification(Notification notification);
}

1
src/main/java/com/iflytop/gd/system/modules/package-info.java

@ -1 +0,0 @@
package com.iflytop.gd.system.modules;
Loading…
Cancel
Save