lixiao f2e13a9f35 流程
查验结果
2025-10-27 14:14:55 +08:00

123 lines
3.2 KiB
Plaintext

import Logger from '../../../utils/Logger'
import { TaskPool } from '../../../utils/TaskPool'
import { EventType, WebsocketClient } from '../../../utils/WebsocketUtils'
import { VehicleBean, VehicleInfo } from './Model'
import { BusinessError } from '@kit.BasicServicesKit'
import { promptAction } from '@kit.ArkUI'
const Tag = "RebootControl"
interface MessageResult {
mode: number
success: number
}
export class RebootControl {
private service: WebsocketClient
private taskPool: TaskPool<boolean> = new TaskPool()
private callback: Function[] = []
constructor(url: string) {
this.service = new WebsocketClient(url)
this.service.subscribe(EventType.Message, (message: string) => {
this.callback.forEach(cb => {
cb(message)
})
})
}
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()
}
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) {
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)
})
})
}
destroy() {
return this.service.close()
}
forward() {
let vehicleInfo = new VehicleInfo();
let angularBean = new VehicleBean();
let lineBean = new VehicleBean();
let speed = 0.1
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();
let speed = -0.1
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();
let speed = 0.1
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();
let speed = -0.1
angularBean.setZ(speed);
vehicleInfo.setAngular(angularBean);
vehicleInfo.setLinear(lineBean);
this.addTask(JSON.stringify(vehicleInfo))
Logger.info(Tag, "添加向右指令")
}
}