import { useStore } from 'vuex' import { postDrc } from '@/api/drc' import { UranusMqtt } from '@/mqtt' export function useConnectDrone() { const store = useStore() const deviceOsdInfo = inject('deviceOsdInfo') const taskDetails = inject('taskDetails') const mqttState = ref(null) const client_id = ref(null) onMounted(async ()=>{ if (mqttState.value) return const workspace_id = taskDetails.value.way_lines[0].workspace_id const result = await postDrc({},workspace_id) if (result?.code === 0) { const { address, client_id, username, password, expire_time } = result.data // @TODO: 校验 expire_time mqttState.value = new UranusMqtt(address, { clientId: client_id, username, password, }) mqttState.value?.initMqtt() mqttState.value?.on('onStatus', statusOptions => { // @TODO: 异常case }) store.commit('SET_MQTT_STATE', mqttState.value) store.commit('SET_CLIENT_ID', client_id) } // @TODO: 认证失败case }) onBeforeUnmount(() => { if (mqttState?.value) { mqttState.value?.destroyed() mqttState.value = null store.commit('SET_MQTT_STATE', null) store.commit('SET_CLIENT_ID', '') } }) return { mqttState, client_id } }