feat: implement central heartbeat and differential signal classes with UDP/TCP communication

This commit is contained in:
wangzhongjie 2025-03-27 14:33:40 +08:00
parent 1336100978
commit 8489d70c58
6 changed files with 145 additions and 37 deletions

View File

@ -4,11 +4,10 @@ export interface TakePhotoCallbackData {
}
export interface ObtainSignalDataConfigType {
// UDP配置
// 三代机后置机UDP配置
udpLocalIp?: string
udpLocalIpPort?: string
udpOppositeIp?: string
udpOppositeIpPort?: string
}

View File

@ -4,7 +4,8 @@ import { BusinessError } from '@ohos.base'
const TAG = '[TcpClient]'
class TcpClient {
export default class TcpClient {
private static instance: TcpClient
private localIp: string = ''
private localIpPort: string = ''
private oppositeIp: string = ''
@ -12,7 +13,6 @@ class TcpClient {
private tcpSendNum: number = 0
private tcp: socket.TCPSocket = null
private events: Array<Function> = []
private static instance: TcpClient
constructor() {
if (!TcpClient.instance) {
@ -31,9 +31,13 @@ class TcpClient {
}
bindTcp(): Promise<void> {
return this.tcp.bind({ address: this.localIp, port: parseInt(this.localIpPort), family: 1 }).then(() => {
return this.tcp.bind({
address: this.localIp, port: parseInt(this.localIpPort), family: 1
}).then(() => {
return this.tcp.connect({
address: { address: this.oppositeIp, port: parseInt(this.oppositeIpPort) },
address: {
address: this.oppositeIp, port: parseInt(this.oppositeIpPort)
},
timeout: 6000
})
}).then(() => {
@ -66,7 +70,9 @@ class TcpClient {
}
sendMsg(data: string): Promise<void> {
return this.tcp?.send({ data }).catch(async (err: BusinessError) => {
return this.tcp?.send({
data
}).catch(async (err: BusinessError) => {
this.tcpSendNum++
if (this.tcpSendNum > 10) {
this.tcpSendNum = 0
@ -77,4 +83,4 @@ class TcpClient {
}
}
export const tcpClient = new TcpClient()
// export const tcpClient = new TcpClient()

View File

@ -91,25 +91,25 @@ export default class UdpClient {
}
// 获取后置机信号
class ObjUdpClient extends UdpClient {
async init(context: common.UIAbilityContext) {
try {
const fileUtil = new FileUtils(context)
const data = await fileUtil.readFile("" + '/config/ipConfig.txt');
if (data?.length > 0) {
const result: IPConfig = JSON.parse(data)
this.create(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort)
}
} catch (e) {
promptAction.showToast({
message: "初始化obj udp失败"
})
}
}
}
// class ObjUdpClient extends UdpClient {
// async init(context: common.UIAbilityContext) {
// try {
// const fileUtil = new FileUtils(context)
// const data = await fileUtil.readFile("" + '/config/ipConfig.txt');
// if (data?.length > 0) {
// const result: IPConfig = JSON.parse(data)
// this.create(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort)
// }
// } catch (e) {
// promptAction.showToast({
// message: "初始化obj udp失败"
// })
// }
// }
// }
// 给中心发送消息
class CenterUDPClient extends UdpClient {
// 给中心发送GPS消息
class centerUDPClient extends UdpClient {
async init(context: common.UIAbilityContext) {
try {
const fileUtil = new FileUtils(context)
@ -146,10 +146,10 @@ class LightUDPClient extends UdpClient {
}
// obj
export const objUDPClient = new ObjUdpClient()
// export const objUDPClient = new ObjUdpClient()
// 中心
export const centerUDPClient = new CenterUDPClient()
// 中心GPS
export const CenterUDPClient = new centerUDPClient()
// 顶灯
export const lightUDPClient = new LightUDPClient()

View File

@ -0,0 +1,45 @@
// 中心心跳/发送消息
import { EnvironmentConfigurationType } from '../../model';
import UdpClient from '../UdpUtils';
class centralHeartbeat {
private centralHeartbeatUdp: UdpClient;
private timer: number = -1
constructor() {
}
// 初始化
init() {
let config: EnvironmentConfigurationType =
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
this.centralHeartbeatUdp = new UdpClient();
this.centralHeartbeatUdp.create(config.udplocalIp, config.udplocalIpPort, config.udpOppositeIp,
config.udpOppositeIpPort);
}
// 接受中心远程指令
getData(callback: (data: ArrayBuffer) => void) {
this.centralHeartbeatUdp.onMessage((data: ArrayBuffer) => {
callback(data);
});
}
// 发送消息
sendData() {
// 组装消息,一秒发送一次
let data = "1";
this.timer = setInterval(() => {
this.centralHeartbeatUdp.sendMsg(data);
}, 1000);
}
// 关闭所有动作
close() {
clearInterval(this.timer);
this.centralHeartbeatUdp.close()
}
}
export const CentralHeartbeat = new centralHeartbeat();

View File

@ -0,0 +1,45 @@
//差分信号
import { EnvironmentConfigurationType } from '../../model';
import TcpClient from '../TcpUtils';
class differentialSignal {
private differentialSignalTcp: TcpClient;
private timer: number = -1
constructor() {
}
init() {
this.differentialSignalTcp = new TcpClient();
let config: EnvironmentConfigurationType =
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
this.differentialSignalTcp.init(config.tcplocalIp, config.tcplocalIpPort, config.tcpOppositeIp,
config.tcpOppositePort);
}
// 发送消息
sendData() {
// 组装消息,一秒发送五次
let data = "1";
this.timer = setInterval(() => {
this.differentialSignalTcp.sendMsg(data);
}, 200);
}
// 获取消息
getData(callback: (data: ArrayBuffer) => void) {
this.differentialSignalTcp.onMessage((data: ArrayBuffer) => {
callback(data);
});
}
// 关闭所有动作
close() {
clearInterval(this.timer);
this.differentialSignalTcp.close()
}
}
export const DifferentialSignal = new differentialSignal();

View File

@ -1,12 +1,11 @@
import { GlobalConfig } from '../../config'
import { ObtainSignalDataConfigType } from '../../model'
import { EnvironmentConfigurationType } from '../../model'
import UdpClient from '../UdpUtils'
// 获取PLC GPS信号
class obtainSignalData {
// 三代机UDP
private thirdGenerationMachineUdp: UdpClient
// 三代机UDP配置
private thirdGenerationMachineUdpConfig: ObtainSignalDataConfigType
// 几代机
private modelNo: string = "3"
@ -15,16 +14,16 @@ class obtainSignalData {
}
// 一些初始化
init(config: ObtainSignalDataConfigType) {
this.thirdGenerationMachineUdpConfig = config
init() {
if (this.modelNo === "0") {
} else if (this.modelNo === "1") {
} else if (this.modelNo === "2") {
} else if (this.modelNo === "3") {
// 初始化UDP
let config: EnvironmentConfigurationType =
AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")
this.thirdGenerationMachineUdp = new UdpClient()
this.thirdGenerationMachineUdp.create(config.udpLocalIp, config.udpLocalIpPort, config.udpOppositeIp,
this.thirdGenerationMachineUdp.create(config.udplocalIp, config.udplocalIpPort, config.udpOppositeIp,
config.udpOppositeIpPort)
}
@ -52,6 +51,20 @@ class obtainSignalData {
}
// 一体机
}
// 发送数据
sendData(data: string) {
// 一代机
// 二代机
// 三代机 通过UDP发送数据
if (this.modelNo === "3") {
this.thirdGenerationMachineUdp.sendMsg(data)
}
// 一体机
}
}
export const ObtainSignalData = new obtainSignalData()