import {useUserStore} from "@/store/index.js"; import {getEnvObj} from "@/utils/index.js"; import {enterRoom} from "@/utils/voiceCallByTX/index.js"; let socketTask = null export function useGlobalWS() { const userStore = useUserStore(); const userId = computed(() => userStore?.userInfo?.user_id) const access_token = computed(() => userStore?.userInfo?.access_token) const {VITE_APP_WS_API_URL} = getEnvObj() // 消息处理 function messageHandler(payload) { switch (payload.biz_code) { case 'JOB_ISREFRESH': break case 'DEVICE_ISREFRESH': break case 'DOWNLOAD_PROGRESS': break case 'LOGOUT_USER': userStore.setUserInfo(null) uni.reLaunch({ url: '/pages/login/index' }) break case 'VoiceCall': enterRoom(payload, userId.value) break default: break; } } // 关闭ws function closeWS() { socketTask?.close({ success: () => { console.log('ws关闭连接'); }, }) } // 初始化ws function initWS() { // 关闭,再连接ws closeWS() if (!access_token.value) return const url = VITE_APP_WS_API_URL + `?x-auth-token=${encodeURI(access_token?.value)}` + `&model_type=3&workspace-id=${userId.value}` // 创建连接 socketTask = uni.connectSocket({ url: url, success: () => { console.log('ws连接成功'); }, fail: (err) => { console.error('ws连接失败:', err); } }); // 消息监听 socketTask.onMessage((result) => { messageHandler(JSON.parse(result.data)) }) } watch(access_token, initWS, {immediate: true}) }