| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- // import { url } from '@src/utils/axios'
- const DEFAULT_ADDRESS = process.env.NODE_ENV === 'production' ? 'ws://mall.huaml.com:8282' : 'ws://mall.huaml.com:8282'
- const TYPE = {
- CART: 1
- }
- Object.freeze(TYPE)
- const init = (address = DEFAULT_ADDRESS) => {
- let ws = new WebSocket(address)
- // 当socket连接打开时
- ws.onopen = function (e) {
- console.log('websocket握手成功')
- // onMessage(e)
- }
- // 当有消息时根据消息类型显示不同信息
- ws.onmessage = function (e) {
- let data
- try {
- data = JSON.parse(e.data)
- } catch (e) {
- data = e.data
- }
- let collection = Watcher.collection || {}
- Object.keys(collection).forEach(watcherId => {
- let watcher = collection[watcherId]
- if (watcher == null) return
- watcher.receive(data)
- })
- }
- ws.onclose = function () {
- console.log('连接关闭,定时重连')
- // init(address)
- }
- ws.onerror = function () {
- console.log('出现错误')
- }
- return ws
- }
- let watcherId = 1000
- const isValidType = type => {
- // return type == null || type == '' || _.isString(type)
- if (type == null || type == '') return true
- let i = -1
- Object.keys(TYPE).forEach((key, index) => {
- if (TYPE[key] === type) return (i = index)
- })
- return i === -1 ? false : true
- }
- class Watcher {
- constructor(types, cb, filter) {
- this.cb = cb
- this.filter = filter
- this._id = watcherId++
- this.types = []
- this._register()
- }
- _register() {
- Watcher.collection[this._id] = this
- }
- // _destroy() {
- // let collection = Watcher.collection
- // collection[this._id] = null
- // }
- _isNeedReceiveMessage(type, data, source, target) {
- if (this.types.length == 0) return true
- let index = this.types.findIndex(_type => {
- return _type == type
- })
- if (index == -1) return false
- if (!_.isFunction(this.filter)) {
- return true
- }
- try {
- return this.filter.call(null, type, data, source, target)
- } catch (e) {
- throw new Error(e)
- }
- }
- receive({ type, data, source, target } = {}) {
- let _need = this._isNeedReceiveMessage(type, data, source, target)
- if (!_need) {
- return
- }
- this.cb.call(null, type, data, source, target)
- }
- }
- //收集器
- Watcher.collection = {}
- const handler = () => {
- let watcher
- let ws
- return {
- MESSAGE_TYPE: TYPE,
- watch(types, cb, filter) {
- ws = init()
- watcher = new Watcher(types, cb, filter)
- return watcher
- },
- destroy() {
- // watcher._destroy()
- ws.close()
- watcher = null
- ws = null
- }
- }
- }
- export default handler
|