import getWsUrl from './getWsUrl'; /** * @param {...any} urls 地址可以传多个 用来初始化多个不同的websocket实例 * 对应的websocket对象及事件都带上对应的系号 this.SOCKET1 onWSMessage1 等 * @returns minxins对象 */ export default function (...urls) { let data = {}, computed = {}, ourl = {}, methods = {}, len = urls.length; const fn = () => { }; for (let i = 0; i < len; i++) { let idx = i + 1; data['SOCKET' + idx] = null; ourl[idx] = getWsUrl(urls[i]); computed['isWSOpen' + idx] = function () { // console.log(this, 'computed=====this'); return !!(this['SOCKET' + idx] && 1 == this['SOCKET' + idx].readyState); } methods['onWSMessage' + idx] = fn; methods['onWSOpen' + idx] = fn; methods['onWSError' + idx] = (() => { return () => { console.log('链接失败', ourl[idx]) } })(idx); methods['WSClose' + idx] = function () { if (this['isWSOpen' + idx]) { this['SOCKET' + idx].close(); } } } return { data() { return { ...data } }, computed: { ...computed }, methods: { ...methods, // 打开链接 openSocket() { // 初始化WebSocket this.WSClose(); this.WSInit(); }, // 初始化 WSInit() { // 未被初始化初始化 for (let i = 0; i < len; i++) { let idx = i + 1; if (!this['isWSOpen' + idx]) { console.log('=====WSinit, url:', ourl[idx]); this['SOCKET' + idx] = new WebSocket(ourl[idx]); this['SOCKET' + idx].onmessage = this['onWSMessage' + idx]; this['SOCKET' + idx].onopen = this['onWSOpen' + idx]; this['SOCKET' + idx].onerror = this['onWSError' + idx]; this['SOCKET' + idx].onclose = this['WSClose' + idx]; } } }, WSClose() { for (let i = 0; i < len; i++) { let idx = i + 1; this['WSClose' + idx](); } } }, mounted() { this.openSocket(); }, beforeDestroy() { this.WSClose(); } } }