import { getWebsocketUrl } from '@/websocket/util/config' import { useConnectWebSocket } from '@/utils/websocket/connect-websocket' /** * 使用无人机WebSocket连接,根据工作区ID动态管理WebSocket连接。 * * @param {Ref} workspaceIdRef - 工作区ID的引用,用于动态更新WebSocket连接。 * @returns {Ref} - 返回一个包含WebSocket消息的响应式对象,键为业务代码,值为对应的消息负载。 */ export const useDroneWS = workspaceIdRef => { const wsInfo = ref({}) let droneWebSocket = null // ws消息钩子 todo后面加节流参数处理 const messageHandler = result => { let payload = JSON.parse(result) if (payload.biz_code) { wsInfo.value[payload.biz_code] = payload } } function init() { let webSocketUrl = getWebsocketUrl() + '&workspace-id=' + workspaceIdRef.value // 监听ws 消息 droneWebSocket = useConnectWebSocket(messageHandler, webSocketUrl) } watch(workspaceIdRef, (newValue, oldValue) => { removeWS() if (workspaceIdRef.value) { init() } }) // 移除ws 事件 function removeWS() { droneWebSocket?.close() droneWebSocket = null wsInfo.value = {} } onBeforeUnmount(() => { removeWS() }) return wsInfo }