| | |
| | | const callStatus = ref(null) |
| | | // token 存储 |
| | | const accessToken = ref('') |
| | | // 断线恢复定时器 |
| | | let recoverTimer = null |
| | | // 存储铃声实例 |
| | | let ringtoneInstance = null |
| | | |
| | | // 监听WebView消息事件 |
| | | if (typeof uni !== 'undefined' && uni.$on) { |
| | | uni.$on('webViewMessage', (data) => { |
| | | console.log('📨 useGlobalWS 收到 WebView 消息:', data) |
| | | // 处理挂断消息 |
| | | if (data?.type === 'hangupVoice') { |
| | | console.log('📞 收到挂断消息') |
| | | initWS() |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 设置默认用户ID为3 |
| | | const defaultUserId = '2021474815063486465'; |
| | |
| | | // } |
| | | |
| | | // 初始化WebSocket连接 |
| | | function isVoiceCallDetailActive() { |
| | | try { |
| | | const pages = getCurrentPages() |
| | | const currentPage = pages[pages.length - 1] |
| | | const route = currentPage?.route || currentPage?.$page?.fullPath || '' |
| | | return String(route).includes('subPackages/voiceCallDetail/index') |
| | | } catch (error) { |
| | | return false |
| | | } |
| | | } |
| | | |
| | | function shouldRecoverWS() { |
| | | return !isVoiceCallDetailActive() && !!useUserStore()?.userInfo?.access_token |
| | | } |
| | | |
| | | function ensureRecoverTimer() { |
| | | if (recoverTimer) { |
| | | return |
| | | } |
| | | recoverTimer = setInterval(() => { |
| | | // console.log('shouldRecoverWS()',shouldRecoverWS(),'----------',websocketService.getConnected()) |
| | | if (shouldRecoverWS() && !websocketService.getConnected()) { |
| | | initWS() |
| | | } |
| | | }, 3000) |
| | | } |
| | | |
| | | function initWS() { |
| | | websocketService.close() |
| | | const userStore = useUserStore() |
| | | accessToken.value =userStore?.userInfo.access_token |
| | | if (!accessToken.value || isVoiceCallDetailActive()) { |
| | | return |
| | | } |
| | | try { |
| | | websocketService.setOnMessageCallback(messageHandler); |
| | | websocketService.setOnOpenCallback(() => {}) |
| | | websocketService.setOnCloseCallback(() => { |
| | | if (shouldRecoverWS()) { |
| | | ensureRecoverTimer() |
| | | } |
| | | }) |
| | | websocketService.setOnErrorCallback(() => { |
| | | if (shouldRecoverWS()) { |
| | | ensureRecoverTimer() |
| | | } |
| | | }) |
| | | |
| | | // 获取当前用户ID,优先使用store中的用户信息 |
| | | const userId = userStore.userInfo?.new_userInfo.userId || defaultUserId; |
| | |
| | | // 使用用户ID初始化WebSocket连接 |
| | | websocketService.init(userId, WS_BASE, accessToken.value); |
| | | // console.log('🌐 全局WebSocket初始化成功,用户ID:', userId); |
| | | } else { |
| | | websocketService.connect(); |
| | | |
| | | } |
| | | } catch (error) { |
| | | } |
| | |
| | | }, |
| | | { immediate: true, deep: true } |
| | | ) |
| | | |
| | | ensureRecoverTimer() |
| | | } |
| | | |
| | | |