mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	refactor: 消息模块重构,infra包路径简写等
This commit is contained in:
		@@ -1,34 +1,25 @@
 | 
			
		||||
import Config from './config';
 | 
			
		||||
import SocketBuilder from './SocketBuilder';
 | 
			
		||||
import { getToken } from '@/common/utils/storage';
 | 
			
		||||
 | 
			
		||||
import { joinClientParams } from './request';
 | 
			
		||||
import { createWebSocket } from './request';
 | 
			
		||||
import { ElNotification } from 'element-plus';
 | 
			
		||||
import { MsgSubtypeEnum } from './commonEnum';
 | 
			
		||||
import EnumValue from './Enum';
 | 
			
		||||
 | 
			
		||||
class SysSocket {
 | 
			
		||||
    /**
 | 
			
		||||
     * socket连接
 | 
			
		||||
     */
 | 
			
		||||
    socket: any;
 | 
			
		||||
    socket: WebSocket | null = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * key -> 消息类别,value -> 消息对应的处理器函数
 | 
			
		||||
     */
 | 
			
		||||
    categoryHandlers: Map<string, any> = new Map();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 消息类型
 | 
			
		||||
     */
 | 
			
		||||
    messageTypes: any = {
 | 
			
		||||
        0: 'error',
 | 
			
		||||
        1: 'success',
 | 
			
		||||
        2: 'info',
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化全局系统消息websocket
 | 
			
		||||
     */
 | 
			
		||||
    init() {
 | 
			
		||||
    async init() {
 | 
			
		||||
        // 存在则不需要重新建立连接
 | 
			
		||||
        if (this.socket) {
 | 
			
		||||
            return;
 | 
			
		||||
@@ -38,9 +29,9 @@ class SysSocket {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        console.log('init system ws');
 | 
			
		||||
        const sysMsgUrl = `${Config.baseWsUrl}/sysmsg?${joinClientParams()}`;
 | 
			
		||||
        this.socket = SocketBuilder.builder(sysMsgUrl)
 | 
			
		||||
            .message((event: { data: string }) => {
 | 
			
		||||
        try {
 | 
			
		||||
            this.socket = await createWebSocket('/sysmsg');
 | 
			
		||||
            this.socket.onmessage = async (event: { data: string }) => {
 | 
			
		||||
                let message;
 | 
			
		||||
                try {
 | 
			
		||||
                    message = JSON.parse(event.data);
 | 
			
		||||
@@ -56,23 +47,32 @@ class SysSocket {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // 默认通知处理
 | 
			
		||||
                const type = this.getMsgType(message.type);
 | 
			
		||||
                let msg = message.msg;
 | 
			
		||||
                let duration = 0;
 | 
			
		||||
                const msgSubtype = EnumValue.getEnumByValue(MsgSubtypeEnum, message.subtype);
 | 
			
		||||
                if (!msgSubtype) {
 | 
			
		||||
                    console.log(`not found msg subtype: ${message.subtype}`);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // 动态导入 i18n 或延迟获取 i18n 实例
 | 
			
		||||
                let title = '';
 | 
			
		||||
                try {
 | 
			
		||||
                    // 方式1: 动态导入
 | 
			
		||||
                    const { i18n } = await import('@/i18n');
 | 
			
		||||
                    title = i18n.global.t(msgSubtype?.label);
 | 
			
		||||
                } catch (e) {
 | 
			
		||||
                    console.warn('i18n not ready, using default title');
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                ElNotification({
 | 
			
		||||
                    duration: duration,
 | 
			
		||||
                    title: message.title,
 | 
			
		||||
                    message: msg,
 | 
			
		||||
                    type: type,
 | 
			
		||||
                    duration: 0,
 | 
			
		||||
                    title,
 | 
			
		||||
                    message: message.msg,
 | 
			
		||||
                    type: msgSubtype?.extra.notifyType || 'info',
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
            .open((event: any) => console.log(event))
 | 
			
		||||
            .close(() => {
 | 
			
		||||
                console.log('close sys socket');
 | 
			
		||||
                this.socket = null;
 | 
			
		||||
            })
 | 
			
		||||
            .build();
 | 
			
		||||
            };
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            console.error('open system ws error', e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    destory() {
 | 
			
		||||
@@ -87,8 +87,7 @@ class SysSocket {
 | 
			
		||||
     * @param category 消息类别
 | 
			
		||||
     * @param handlerFunc 消息处理函数
 | 
			
		||||
     */
 | 
			
		||||
    registerMsgHandler(category: any, handlerFunc: any) {
 | 
			
		||||
        this.init();
 | 
			
		||||
    async registerMsgHandler(category: any, handlerFunc: any) {
 | 
			
		||||
        if (this.categoryHandlers.has(category)) {
 | 
			
		||||
            console.log(`${category}该类别消息处理器已存在...`);
 | 
			
		||||
            return;
 | 
			
		||||
@@ -98,10 +97,6 @@ class SysSocket {
 | 
			
		||||
        }
 | 
			
		||||
        this.categoryHandlers.set(category, handlerFunc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getMsgType(msgType: any) {
 | 
			
		||||
        return this.messageTypes[msgType];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 全局系统消息websocket;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user