mirror of
https://github.com/hi2shark/nazhua.git
synced 2026-01-14 08:10:42 +08:00
83 lines
1.7 KiB
JavaScript
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();
|
|
};
|