123 lines
3.2 KiB
Plaintext
Raw Normal View History

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, "添加向右指令")
}
}