123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			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, "添加向右指令")
 | |
|   }
 | |
| } |