import { useUserStore } from "@/store/index.js"; import useAppStore from "../store/modules/app/index.js"; import websocketService from "@/utils/websocket.js"; export function useGlobalWS() { const userStore = useUserStore(); const appStore = useAppStore(); const callStatus = ref(null) // 设置默认用户ID为3 const defaultUserId = '3'; // WebSocket基础URL const WS_BASE = 'wss://wrj.shuixiongit.com/ws/chat?userId='; // 消息处理 function messageHandler(payload) { // console.log('🌐 全局WebSocket收到消息111111111111111111111:', payload) // 先尝试直接处理消息(适用于mobile-web-view的voiceCallDetail页面的消息格式) const t = (payload.type || '').toString() // const bizCode = payload.biz_code || '' callStatus.value = t // console.log('📋 消息分析:type=' + t ) // 处理语音通话请求 if (t === 'call') { console.log('📞 全局收到来电 call,来自', payload.from) // 构建来电参数 const callParams = { peerUid: payload.from, from: payload.from, type: 'incoming' }; // 转义参数以便在URL中传递 const encodedParams = encodeURIComponent(JSON.stringify(callParams)); try { // 优先使用uni-app的导航API(适用于同应用内跳转) if (typeof uni !== 'undefined' && uni.navigateTo) { uni.navigateTo({ url: `/subPackages/voiceCallDetail/index?voiceparams=${encodedParams}`, }); } else { console.error('无法跳转到语音通话页面:当前环境不支持导航'); } } catch (error) { console.error('跳转到语音通话页面失败:', error); } return } // 然后处理biz_code格式的消息 // switch (bizCode) { // case 'JOB_ISREFRESH': // appStore.setJobUpdateKeyAdd() // break // case 'DEVICE_ISREFRESH': // appStore.setDeviceUpdateKeyAdd() // 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: // // 记录未处理的消息 // console.log('未处理的WebSocket消息:', payload) // break; // } } // 初始化WebSocket连接 function initWS() { try { websocketService.setOnMessageCallback(messageHandler); // 获取当前用户ID,优先使用store中的用户信息 const userId = userStore.userInfo?.id || defaultUserId; // 检查是否已经有活跃的WebSocket连接 if (!websocketService.getConnected() || websocketService.userId !== userId) { // 使用用户ID初始化WebSocket连接 websocketService.init(userId, WS_BASE); // console.log('🌐 全局WebSocket初始化成功,用户ID:', userId); } else { websocketService.connect(); } } catch (error) { } } watch( () => callStatus.value, (newValue) => { if (newValue === 'accept') { console.log('📞 通话中,跳过WebSocket初始化'); return; } initWS(); }, { immediate: true, deep: true } ) }