forked from drone/command-center-dashboard

罗广辉
2025-04-15 2888173145d91e465a25bea276acaa41f9a7b124
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
    }
}