import io from 'socket.io-client'
export const MESSAGE_TYPE = {
GLOBAL_NOTIFY: 'global_notify',
FILE_EXPORT: 'file_export',
DATA_IMPORT: 'data_import', // 工单数据导入
MESSAGE_NOTIFY: 'message_notify',
ERROR: 'error',
}
let BASE_SOCKET_URL = ''
let SOCKET_TOKEN = ''
export function initSocketUrl (url) {
BASE_SOCKET_URL = url
}
export function initSocketToken (socketToken) {
SOCKET_TOKEN = socketToken
}
class MySocket {
initSocket (options = {}) {
const _socket = io(BASE_SOCKET_URL, {
reconnectionAttempts: 100,
reconnectionDelay: 2e4,
reconnectionDelayMax: 6e4,
...options,
})
_socket.on(MESSAGE_TYPE.ERROR, (e) => {
return console.error(e)
})
_socket.on('disconnect', (...args) => {
// console.log(...args)
})
return _socket
}
onGlobalNotifyMessage (type, callback) {
if (!this.globalNotifySocket) {
this.globalNotifySocket = this.initSocket({
path: '/socket',
transports: ['websocket'],
query: {
type: 'global_notify',
token: SOCKET_TOKEN,
},
upgrade: false,
})
}
this.globalNotifySocket.on(type, callback)
}
initGlobalNotifyListener (mockUser) {
if (!this.isGlobalNotifyListenersInit) {
this.isGlobalNotifyListenersInit = true
this.asyncTaskMap = this.asyncTaskMap || {}
this.onGlobalNotifyMessage(MESSAGE_TYPE.DATA_IMPORT, (data) => {
if (data) {
let dataImportCenterInstance = window._DATA_IMPORT_CENTER_INSTANCE_
switch (data.type) {
case 'data_import_init':
if (dataImportCenterInstance) {
dataImportCenterInstance.initTotal(data.total)
}
break
....
}
}
})
} else if (mockUser) {
this.isGlobalNotifyListenersInit = false
this.asyncTaskMap = {}
this.globalNotifySocket && this.globalNotifySocket.close()
this.globalNotifySocket = null
this.initGlobalNotifyListener()
}
}
}
export const socket = new MySocket()
socket通信实例组件
最新推荐文章于 2024-07-24 10:40:52 发布