socket通信实例组件

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()

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值