tcp独立进程

This commit is contained in:
lixiao 2025-05-17 12:10:24 +08:00
parent 6c45615d8c
commit 543e779107
7 changed files with 105 additions and 137 deletions

View File

@ -1,58 +1,66 @@
import TcpClient from './TcpClient';
import { getSyncData } from '../service/initable';
import hilog from '@ohos.hilog';
import FileUtil from '../../common/utils/File'
import { GlobalConfig } from '../../config/index'
import UdpClientByCenter from './UdpClientByCenter';
let tcpClient: TcpClient = null
let udpGps1: UdpClientByCenter = null
let udpGps2: UdpClientByCenter = null
let tick: number
let lastTime = new Date()
export async function getTCP(flag = false) {
if (globalThis.TcpClient && globalThis.TcpClient.closeTcp && !flag) {
if (tcpClient && !flag) {
return
}
globalThis.getCloseTcp = true
if (flag) {
console.log("tcp 重启服务")
}
const fileUtil = new FileUtil(globalThis.context)
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
if (data === '' || data === undefined) {
globalThis.TcpClient = {}
globalThis.TcpClient.onMessage = () => {
}
} else {
const result = JSON.parse(data)
console.log("tcp init", result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
const tcpClient: TcpClient = new TcpClient(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
globalThis.TcpClient = tcpClient
tcpClient = new TcpClient(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
udpGps1 = new UdpClientByCenter(result.udplocalIp, (Number(result.udplocalIpPort) + 10).toString(), result.udpOppositeIp, result.udpOppositeIpPort)
console.log("tcp udp port", result.udplocalIp, (Number(result.udplocalIpPort) + 10).toString(), result.udpOppositeIp, result.udpOppositeIpPort)
if (result.udpOppositeIp2) {
udpGps2 = new UdpClientByCenter(result.udplocalIp, (Number(result.udplocalIpPort) + 11).toString(), result.udpOppositeIp2, (Number(result.udpOppositeIpPort) + 1).toString())
}
udpGps1?.bindUdp()
udpGps2?.bindUdp()
await tcpClient?.bindTcp()
await tcpClient?.connectTcp()
clearInterval(tick)
await globalThis.TcpClient.bindTcp()
await globalThis.TcpClient.connectTcp()
await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
clearInterval(globalThis.intervalSendMsg)
globalThis.intervalSendMsg = setInterval(() => {
if (!globalThis.getCloseTcp) {
globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
globalThis.tcpStep += 1
if (globalThis.tcpStep > 4) {
globalThis.tcpStep = 0
getTCP(true)
console.log('tcp重连开始')
}
}
}, 1000 * 2)
globalThis.TcpClient.onError((val) => {
setTimeout(() => {
tick = setInterval(() => {
let now = new Date()
if (now.getTime() - lastTime.getTime() > (1000 * 6)) {
console.log("差分tcp信号丢失")
getTCP(true)
}, 1000)
return
}
if (globalThis.carInfo.carNo) {
tcpClient?.sendMsg(globalThis.carInfo.carNo) //1002
}
}, 1000 * 1.5)
tcpClient?.onError(() => {
getTCP(true)
})
await globalThis.TcpClient.onMessage((val) => {
tcpClient?.onMessage((val) => {
lastTime = new Date()
console.log("tcp test 收到差分改正数 length: ", val.byteLength)
if (val) {
globalThis.udpClient?.sendMsg(val, () => {
console.log("tcp test 后置机写入改正数成功")
udpGps1?.sendMsg(val, () => {
console.log("tcp test 后置机1写入改正数成功")
})
udpGps2?.sendMsg(val, () => {
console.log("tcp test 后置机2写入改正数成功")
})
globalThis.udpClientGps2?.sendMsg(val)
}
})
}
return
}

View File

@ -23,7 +23,7 @@ export async function getUDP(context, errorFlag?) {
} else {
const result = JSON.parse(data)
// 未绑定
console.log(` getUDP has no udp clent and bind `);
console.log(`getUDP has no udp clent and bind `);
const udpClient: UdpClientByCenter = new UdpClientByCenter(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort)
udpClient.bindUdp()
udpClient.sendMsg('111')

View File

@ -12,12 +12,8 @@ export default class TcpClient {
private localIpPort: string = ''
private oppositeIp: string = ''
private oppositeIpPort: string = ''
private num: number = 0
//重连次数
private tcpSendNum: number = 0
//重连次数
private folderPath
private tcp: socket.TCPSocket = null
constructor(tcplocalIp: string, tcplocalIpPort: string, tcpOppositeIp: string, tcpOppositePort: string) {
@ -31,11 +27,8 @@ export default class TcpClient {
onError(callback?) {
this.tcp.on('error', err => {
globalThis.getCloseTcp = true
console.log(TAG, 'getCloseTtcpOnerror', JSON.stringify(err))
setTimeout(async () => {
getTCP()
}, 2000)
console.log(TAG, 'tcp on error: ', JSON.stringify(err))
callback?.()
});
}
@ -43,111 +36,62 @@ export default class TcpClient {
return new Promise((resolve, reject) => {
this.tcp.bind({
address: this.localIp, port: Number(this.localIpPort), family: 1
}, err => {
if (err) {
setTimeout(async () => {
getTCP()
}, 2000)
console.log('getCloseTBinderror');
hilog.info(0x0000, 'testTag', "tcpBinderror:" + JSON.stringify(err));
resolve(true)
return
}
resolve(false)
}).then(() => {
resolve(true)
}).catch(err => {
console.log("tcp bind error: ", JSON.stringify(err))
getTCP(true)
reject(err)
})
})
}
connectTcp() {
return new Promise((resolve, reject) => {
let promise = this.tcp.connect({
this.tcp.connect({
address: {
address: this.oppositeIp, port: Number(this.oppositeIpPort), family: 1
}, timeout: 1000 * 15
});
promise.then(() => {
this.tcp.setExtraOptions({
keepAlive: true,
}, err => {
if (err) {
console.log('getCloseTconnectsuccess', 'error', globalThis.getCloseTcp)
setTimeout(() => {
getTCP()
resolve(false)
}, 9000)
return;
}
});
globalThis.getCloseTcp = false
}).then(() => {
return this.tcp.setExtraOptions({
keepAlive: true
})
}).then(() => {
resolve(true)
}).catch(err => {
console.log('socketTag', 'error')
setTimeout(() => {
getTCP()
resolve(false)
}, 9000)
});
console.log("tcp connect or keepAlive error: ", JSON.stringify(err))
getTCP()
reject(err)
})
})
}
sendMsg(msg: string) {
return new Promise((resolve, reject) => {
let promise = this.tcp.send({
data: msg
});
promise.then(() => {
console.log(`${TAG} TCP send success`)
resolve(true)
}).catch(err => {
console.log(`${TAG} TCP send error ${JSON.stringify(err)}`)
this.tcpSendNum++
if (!globalThis.getCloseTcp && this.tcpSendNum > 10) {
globalThis.getCloseTcp = true
setTimeout(async () => {
getTCP(true)
}, 3000)
this.tcpSendNum = 0
return
}
reject(false)
});
this.tcp.send({
data: msg
}).catch(err => {
console.log("tcp send error: ", JSON.stringify(err))
this.tcpSendNum++
if (this.tcpSendNum > 10) {
getTCP(true)
}
})
}
onMessage(callback?) {
this.tcp.on('message', value => {
globalThis.tcpStep = 0
globalThis.tcpUdpError = false
if (value) {
let dataView = new DataView(value.message)
const Arraybuffer = value.message.slice(5, dataView?.byteLength);
callback && callback(Arraybuffer)
callback?.(Arraybuffer)
} else {
callback && callback('')
callback?.('')
}
clearInterval(globalThis.intervaltcp)
globalThis.intervaltcp = setInterval(() => {
//程序断开
if (globalThis.tcpUdpError) {
console.log(TAG, 'tcp信号丢失')
prompt.showToast({
message: 'tcp信号丢失',
duration: 2000
});
}
globalThis.tcpUdpError = true;
}, 3000)
// callback(value.message)
});
}
offTcp(callback) {
console.log(TAG, 'tcpofff')
console.log(TAG, 'tcp off')
this.tcp.off('message', callback);
}
@ -155,19 +99,13 @@ export default class TcpClient {
return new Promise((resolve, reject) => {
console.log(TAG, 'tcpClose')
this.tcp.close().then(() => {
globalThis.getCloseTcp = true
console.log('getCloseTcpsocketTagclose', 'success', globalThis.getCloseTcp)
console.log(TAG, 'tcpCloseSuccess')
callback()
console.log(TAG, 'tcp close success')
callback?.()
resolve(true)
}).catch(err => {
setTimeout(async () => {
getTCP(true)
}, 9000)
console.log('getCloseTcpsocketTagclose', 'error', globalThis.getCloseTcp)
resolve(false)
console.log('close tcp error: ', JSON.stringify(err))
getTCP(true)
reject(err)
});
})
}

View File

@ -164,6 +164,9 @@ struct Index {
// A2牵引车2号导航仪
if (carInfo.kscx == 'A2' && !globalThis.udpClientGps2) {
await getUDPGps2(this.context, false)
this.serviceExtProxy.processData("1", () => {
})
}
getSyncData('MA_SYSSET').then((data: any[]) => {
data.forEach(sys => {
@ -283,6 +286,9 @@ struct Index {
if (carInfo.kscx == 'A2') {
console.log("GPS2 udp")
getUDPGps2(this.context, false)
this.serviceExtProxy.processData("1", () => {
})
}
})

View File

@ -297,12 +297,28 @@ export default struct SignDisplayCom {
Flex({ direction: FlexDirection.Column }) {
ForEach(this.GPSColum, (item) => {
Column() {
Text(`${item.key}:${item.value}`)
.fontSize((item.key === '龄期' ? 20 : 12) * this.ratio)
.lineHeight(20 * this.ratio)
.fontColor(item.key === '龄期' ? "#6b96f2" : '#fff')
}.height(20 * this.ratio).justifyContent(FlexAlign.Start).width('100%')
if (item.key === '龄期') {
Column() {
Text(`${item.key}:${item.value}`)
.fontSize(20 * this.ratio)
.lineHeight(20 * this.ratio)
.fontColor("#6b96f2")
}.height(20 * this.ratio).justifyContent(FlexAlign.Start).width('100%')
} else if (item.key === "状态") {
Column() {
Text(`${item.key}:${item.value}`)
.fontSize(20 * this.ratio)
.lineHeight(20 * this.ratio)
.fontColor(item.value != '4' ? "#ff5e5e" : "#6b96f2")
}.height(20 * this.ratio).justifyContent(FlexAlign.Start).width('100%')
} else {
Column() {
Text(`${item.key}:${item.value}`)
.fontSize(12 * this.ratio)
.lineHeight(20 * this.ratio)
.fontColor('#fff')
}.height(20 * this.ratio).justifyContent(FlexAlign.Start).width('100%')
}
})
}
}