nazhua/src/ws/index.js

83 lines
1.7 KiB
JavaScript

import config from '@/config';
import MessageSubscribe from '@/utils/subscribe';
import v1TransformV0 from '@/utils/transform-v1-2-v0';
import WSService from './service';
/**
* 获取不同版本的WebSocket路径
*/
function getWsApiPath() {
let url = config?.nazhua?.wsPath;
if (config?.nazhua?.nezhaVersion === 'v1') {
url = config?.nazhua?.v1WsPath;
}
const a = document.createElement('a');
a.href = url;
return a.href.replace(/^http/, 'ws');
}
const msg = new MessageSubscribe();
const wsService = new WSService({
wsUrl: getWsApiPath(),
onConnect: () => {
msg.emit('connect');
},
onClose: () => {
msg.emit('close');
},
onError: (error) => {
msg.emit('error', error);
},
onMessage: (data) => {
// 消息体包含.now和.servers 粗暴的判定为服务器列表项信息
if (data?.now && data?.servers) {
if (config.nazhua.nezhaVersion === 'v1') {
msg.emit('servers', {
now: data.now,
servers: data?.servers?.map?.((server) => {
const item = v1TransformV0(server);
return item;
}) || [],
});
} else {
msg.emit('servers', data);
}
} else {
msg.emit('message', data);
}
},
});
function restart() {
if (wsService.connected !== 0) {
wsService.close();
}
wsService.active();
}
export {
wsService,
msg,
restart,
};
export default (actived) => {
if (wsService.connected === 2) {
if (actived) {
actived();
}
return;
}
msg.once('connect', () => {
if (actived) {
actived();
}
});
// 如果已经连接中,则不再连接
if (wsService.connected === 1) {
return;
}
wsService.active();
};