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
|
}
|
}
|