2025-09-23 16:46:30 +08:00
|
|
|
import Logger from '../../../utils/Logger'
|
|
|
|
|
import { TaskPool } from '../../../utils/TaskPool'
|
2025-10-13 10:17:12 +08:00
|
|
|
import { EventType, WebsocketClient } from '../../../utils/WebsocketUtils'
|
2025-09-23 16:46:30 +08:00
|
|
|
import { VehicleBean, VehicleInfo } from './Model'
|
2025-10-13 10:17:12 +08:00
|
|
|
import { BusinessError } from '@kit.BasicServicesKit'
|
2025-10-27 14:14:55 +08:00
|
|
|
import { promptAction } from '@kit.ArkUI'
|
2025-09-23 16:46:30 +08:00
|
|
|
|
|
|
|
|
const Tag = "RebootControl"
|
|
|
|
|
|
2025-10-13 10:17:12 +08:00
|
|
|
interface MessageResult {
|
|
|
|
|
mode: number
|
|
|
|
|
success: number
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-23 16:46:30 +08:00
|
|
|
export class RebootControl {
|
2025-09-29 19:58:38 +08:00
|
|
|
private service: WebsocketClient
|
2025-09-23 16:46:30 +08:00
|
|
|
private taskPool: TaskPool<boolean> = new TaskPool()
|
2025-10-13 10:17:12 +08:00
|
|
|
private callback: Function[] = []
|
2025-09-23 16:46:30 +08:00
|
|
|
|
2025-09-29 19:58:38 +08:00
|
|
|
constructor(url: string) {
|
|
|
|
|
this.service = new WebsocketClient(url)
|
2025-10-13 10:17:12 +08:00
|
|
|
this.service.subscribe(EventType.Message, (message: string) => {
|
|
|
|
|
this.callback.forEach(cb => {
|
|
|
|
|
cb(message)
|
|
|
|
|
})
|
|
|
|
|
})
|
2025-09-23 16:46:30 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private addTask(data: string) {
|
|
|
|
|
this.taskPool.add({
|
|
|
|
|
execute: (): Promise<boolean> => {
|
|
|
|
|
return this.service.send(data)
|
|
|
|
|
},
|
|
|
|
|
repair: (): Promise<void> => {
|
|
|
|
|
return this.service.reconnect()
|
|
|
|
|
},
|
|
|
|
|
retryCount: 5
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
init() {
|
|
|
|
|
return this.service.connect()
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-13 10:17:12 +08:00
|
|
|
getMode() {
|
|
|
|
|
return new Promise<MessageResult>((resolve, reject) => {
|
|
|
|
|
this.service.send(JSON.stringify({
|
|
|
|
|
"cmmand": "getMode"
|
|
|
|
|
})).then(() => {
|
|
|
|
|
let cb = (msg: string) => {
|
|
|
|
|
resolve(JSON.parse(msg))
|
|
|
|
|
this.callback = this.callback.filter(item => item != cb)
|
|
|
|
|
}
|
|
|
|
|
this.callback.push(cb)
|
|
|
|
|
}).catch((err: BusinessError) => {
|
|
|
|
|
reject(err)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setMode(mode: number) {
|
2025-10-27 14:14:55 +08:00
|
|
|
return new Promise<boolean>((resolve, reject) => {
|
|
|
|
|
this.service.send(JSON.stringify({ mode })).then(resolve).catch((err: BusinessError) => {
|
|
|
|
|
promptAction.showToast({
|
|
|
|
|
message: JSON.stringify(err)
|
|
|
|
|
})
|
|
|
|
|
reject(err)
|
|
|
|
|
})
|
|
|
|
|
})
|
2025-10-13 10:17:12 +08:00
|
|
|
}
|
|
|
|
|
|
2025-09-29 19:58:38 +08:00
|
|
|
destroy() {
|
|
|
|
|
return this.service.close()
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-23 16:46:30 +08:00
|
|
|
forward() {
|
|
|
|
|
let vehicleInfo = new VehicleInfo();
|
|
|
|
|
let angularBean = new VehicleBean();
|
|
|
|
|
let lineBean = new VehicleBean();
|
2025-09-29 19:58:38 +08:00
|
|
|
let speed = 0.1
|
2025-09-23 16:46:30 +08:00
|
|
|
lineBean.setX(speed);
|
|
|
|
|
vehicleInfo.setAngular(angularBean);
|
|
|
|
|
vehicleInfo.setLinear(lineBean);
|
|
|
|
|
this.addTask(JSON.stringify(vehicleInfo))
|
|
|
|
|
Logger.info(Tag, "添加向前指令")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
backward() {
|
|
|
|
|
let vehicleInfo = new VehicleInfo();
|
|
|
|
|
let angularBean = new VehicleBean();
|
|
|
|
|
let lineBean = new VehicleBean();
|
2025-09-29 19:58:38 +08:00
|
|
|
let speed = -0.1
|
2025-09-23 16:46:30 +08:00
|
|
|
lineBean.setX(speed);
|
|
|
|
|
vehicleInfo.setAngular(angularBean);
|
|
|
|
|
vehicleInfo.setLinear(lineBean);
|
|
|
|
|
this.addTask(JSON.stringify(vehicleInfo))
|
|
|
|
|
Logger.info(Tag, "添加向后指令")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
left() {
|
|
|
|
|
let vehicleInfo = new VehicleInfo();
|
|
|
|
|
let angularBean = new VehicleBean();
|
|
|
|
|
let lineBean = new VehicleBean();
|
2025-09-29 19:58:38 +08:00
|
|
|
let speed = 0.1
|
2025-09-23 16:46:30 +08:00
|
|
|
angularBean.setZ(speed);
|
|
|
|
|
vehicleInfo.setAngular(angularBean);
|
|
|
|
|
vehicleInfo.setLinear(lineBean);
|
|
|
|
|
this.addTask(JSON.stringify(vehicleInfo))
|
|
|
|
|
Logger.info(Tag, "添加向左指令")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
right() {
|
|
|
|
|
let vehicleInfo = new VehicleInfo();
|
|
|
|
|
let angularBean = new VehicleBean();
|
|
|
|
|
let lineBean = new VehicleBean();
|
2025-09-29 19:58:38 +08:00
|
|
|
let speed = -0.1
|
2025-09-23 16:46:30 +08:00
|
|
|
angularBean.setZ(speed);
|
|
|
|
|
vehicleInfo.setAngular(angularBean);
|
|
|
|
|
vehicleInfo.setLinear(lineBean);
|
|
|
|
|
this.addTask(JSON.stringify(vehicleInfo))
|
|
|
|
|
Logger.info(Tag, "添加向右指令")
|
|
|
|
|
}
|
|
|
|
|
}
|