GlobalUdp.ts 优化 #13

Closed
lixiao wants to merge 1 commits from lixiao into main
3 changed files with 458 additions and 315 deletions

View File

@ -1,98 +1,232 @@
import UdpClient from './UdpClient'; import UdpClient from './UdpClient';
import UdpClientByCenter from './UdpClientByCenter'; import UdpClientByCenter from './UdpClientByCenter';
import { getSyncData} from '../service/initable' import { getSyncData } from '../service/initable'
import { dateFormat } from '../../common/utils/tools' import { fillZero, string2Bytes } from '../utils/tools'
import prompt from '@ohos.prompt'
import TcpClient from './TcpClient'; interface UdpOption {
import {string2Bytes} from '../../common/utils/tools' udplocalIp: string
export async function sendMsg(val){ udplocalIpPort: string
// globalThis.udpClient1&&globalThis.udpClient1.sendMsg(val) udpOppositeIp: string
udpOppositeIpPort: string
} }
export async function getUDP(flag:Boolean=false) {
getSyncData('IpConfigTable').then((result:Array<any>)=>{ export default class UdpUtils {
if(result.length){ private static config: UdpOption
if(!flag){
public static async getConfig() {
this.config = ((await getSyncData("IpConfigTable")) as Array<any> || [])[0]
}
public static async createUdpClient(client: UdpClient | UdpClientByCenter, udpConfig: UdpOption, type: string, onMessage?: Function) {
if (!this.config) {
return [{
onMessage: () => {
}
}, ""]
}
if (client) {
await client.closeUdp()
client.rebindUdp(udpConfig.udplocalIp, udpConfig.udplocalIpPort, udpConfig.udpOppositeIp, udpConfig.udpOppositeIpPort)
} else {
if (type === "1") {
client = new UdpClient(udpConfig.udplocalIp, udpConfig.udplocalIpPort, udpConfig.udpOppositeIp, udpConfig.udpOppositeIpPort)
} else {
client = new UdpClientByCenter(udpConfig.udplocalIp, udpConfig.udplocalIpPort, udpConfig.udpOppositeIp, udpConfig.udpOppositeIpPort)
}
client.bindUdp()
}
if (type === "1") {
client.sendMsg("111")
}
client.onMessage(onMessage || (() => {
}))
client.onError(client.onMessage || (() => {
}))
return [client, `http://${this.config[0].centerIp}:${this.config[0].centerPort}`]
}
public static async getUdp(client: UdpClient) {
return this.createUdpClient(client, {
udplocalIp: this.config.udplocalIp,
udplocalIpPort: this.config.udplocalIpPort,
udpOppositeIp: this.config.udpOppositeIp,
udpOppositeIpPort: this.config.udpOppositeIpPort
}, "1")
}
public static async getUdp2(client: UdpClient) {
return this.createUdpClient(client, {
udplocalIp: this.config.udplocalIp,
udplocalIpPort: "8800",
udpOppositeIp: globalThis.carInfo?.udpAddress,
udpOppositeIpPort: globalThis.carInfo?.messagePort
}, "2", (val) => {
if (val.id == '32') {
globalThis.signNum = val.body[1]
} else if (val.id == '46') {
let tmpList = []
const str = globalThis.lsh
for (let i = 0; i < str.length; i++) {
tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0])
}
const param = {
id: 47,
list: tmpList,
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId
}
globalThis.udpClient2.send(param)
}
})
}
public static async setTopLineUdp() {
if (this.config && this.config.udplocalIp) {
const {udplocalIp,udpOppositeIp,udpOppositeIpPort} = this.config;
const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '55509', udpOppositeIp, udpOppositeIpPort)
udpClient.bindUdp()
return {
send(bytes) {
udpClient.sendHeadMsg(bytes)
}
}
}
}
public static async setJudgeUdp() {
let udpIndex = 0;
let currentUdpIndex = 0;
let judgeUdpTimer
clearInterval(judgeUdpTimer)
judgeUdpTimer = setInterval(() => {
udpIndex += 1;
}, 1000);
if (this.config && this.config.udplocalIp) {
const {udplocalIp} = this.config;
const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080', globalThis.carInfo?.gpsAddress, globalThis.carInfo?.hintPort)
udpClient.bindUdp()
udpClient.onMessage((val) => {
console.log('valval', val)
})
globalThis.judgeUdpClient = udpClient;
return {
send(bytes) {
if (udpIndex > currentUdpIndex) {
udpClient.sendMsg({
id: 45,
list: bytes,
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId
})
currentUdpIndex = udpIndex
}
}
}
}
}
}
export async function sendMsg(val) {
}
export async function getUDP(flag: Boolean = false) {
getSyncData('IpConfigTable').then((result: Array<any>) => {
if (result.length) {
if (!flag) {
return return
} }
if(globalThis.udpClient&&globalThis.udpClient.closeUdp){ if (globalThis.udpClient && globalThis.udpClient.closeUdp) {
globalThis.udpClient.closeUdp(()=>{ globalThis.udpClient.closeUdp(() => {
globalThis.udpClient.rebindUdp(result[0].udplocalIp, result[0].udplocalIpPort,result[0].udpOppositeIp,result[0].udpOppositeIpPort) globalThis.udpClient.rebindUdp(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp, result[0].udpOppositeIpPort)
globalThis.udpClient.sendMsg('111') globalThis.udpClient.sendMsg('111')
globalThis.host=`http://${result[0].centerIp}:${result[0].centerPort}` globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
globalThis.udpClient.onError(globalThis.udpClient.onMessage?globalThis.udpClient.onMessage:()=>{}) globalThis.udpClient.onError(globalThis.udpClient.onMessage ? globalThis.udpClient.onMessage : () => {
})
}) })
}else{ } else {
const udpClient: UdpClient =new UdpClient(result[0].udplocalIp, result[0].udplocalIpPort,result[0].udpOppositeIp,result[0].udpOppositeIpPort) const udpClient: UdpClient = new UdpClient(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp, result[0].udpOppositeIpPort)
udpClient.bindUdp() udpClient.bindUdp()
udpClient.sendMsg('111') udpClient.sendMsg('111')
globalThis.udpClient = udpClient globalThis.udpClient = udpClient
globalThis.host=`http://${result[0].centerIp}:${result[0].centerPort}` globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
globalThis.udpClient.onError(globalThis.udpClient.onMessage?globalThis.udpClient.onMessage:()=>{}) globalThis.udpClient.onError(globalThis.udpClient.onMessage ? globalThis.udpClient.onMessage : () => {
})
} }
}else{ } else {
globalThis.udpClient={} globalThis.udpClient = {}
globalThis.udpClient.onMessage=()=>{} globalThis.udpClient.onMessage = () => {
globalThis.host='' }
globalThis.host = ''
} }
}) })
} }
export async function getUDP2(flag:Boolean=false) { export async function getUDP2(flag: Boolean = false) {
getSyncData('IpConfigTable').then(async (result:Array<any>)=>{ getSyncData('IpConfigTable').then(async (result: Array<any>) => {
if(result.length){ if (result.length) {
if(globalThis.udpClient2&&globalThis.udpClient2.closeUdp){ if (globalThis.udpClient2 && globalThis.udpClient2.closeUdp) {
if(!flag){ if (!flag) {
return return
} }
globalThis.udpClient2.closeUdp(async ()=>{ globalThis.udpClient2.closeUdp(async () => {
globalThis.udpClient2.rebindUdp(result[0].udplocalIp, '8800',globalThis.carInfo?.udpAddress,globalThis.carInfo?.messagePort) globalThis.udpClient2.rebindUdp(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
globalThis.udpClient2.onMessage((val)=>{ globalThis.udpClient2.onMessage((val) => {
}) })
globalThis.udpClient2.onError() globalThis.udpClient2.onError()
globalThis.udpClient2.setMsgCallBack=()=>{} globalThis.udpClient2.setMsgCallBack = () => {
}
}) })
}else{ } else {
const udpClient: UdpClientByCenter =new UdpClientByCenter(result[0].udplocalIp, '8800',globalThis.carInfo?.udpAddress,globalThis.carInfo?.messagePort) const udpClient: UdpClientByCenter = new UdpClientByCenter(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
globalThis.udpClient2 = udpClient globalThis.udpClient2 = udpClient
globalThis.udpClient2.bindUdp() globalThis.udpClient2.bindUdp()
globalThis.udpClient2.onError() globalThis.udpClient2.onError()
globalThis.udpClient2.onMessage((val)=>{ globalThis.udpClient2.onMessage((val) => {
if(val.id=='32'){ if (val.id == '32') {
globalThis.signNum=val.body[1] globalThis.signNum = val.body[1]
}else if(val.id=='46'){ } else if (val.id == '46') {
let tmpList = [] let tmpList = []
const str = globalThis.lsh const str = globalThis.lsh
for (let i = 0;i < str.length; i++) { for (let i = 0; i < str.length; i++) {
tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0])
} }
const param = { id: 47, list: tmpList, carNo: globalThis.carInfo.carNo, placeId: globalThis.carInfo.examinationRoomId } const param = {
id: 47,
list: tmpList,
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId
}
globalThis.udpClient2.send(param) globalThis.udpClient2.send(param)
} }
}) })
} }
}else{ } else {
globalThis.udpClient2={} globalThis.udpClient2 = {}
globalThis.udpClient2.onMessage=()=>{} globalThis.udpClient2.onMessage = () => {
globalThis.udpClient2.setMsgCallBack=()=>{} }
globalThis.udpClient2.setMsgCallBack = () => {
}
} }
}) })
} }
export async function setTopLineUdp(){ export async function setTopLineUdp() {
const config = await getSyncData('IpConfigTable'); const config = await getSyncData('IpConfigTable');
if(config && config[0] && config[0].udplocalIp){ if (config && config[0] && config[0].udplocalIp) {
const {udplocalIp,udpOppositeIp,udpOppositeIpPort} = config[0]; const {udplocalIp,udpOppositeIp,udpOppositeIpPort} = config[0];
const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '55509',udpOppositeIp,udpOppositeIpPort) const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '55509', udpOppositeIp, udpOppositeIpPort)
udpClient.bindUdp() udpClient.bindUdp()
return { return {
send(bytes){ send(bytes) {
udpClient.sendHeadMsg(bytes) udpClient.sendHeadMsg(bytes)
} }
} }
@ -100,29 +234,34 @@ export async function setTopLineUdp(){
} }
// //
export async function setJudgeUdp(){ export async function setJudgeUdp() {
const config = await getSyncData('IpConfigTable'); const config = await getSyncData('IpConfigTable');
let udpIndex = 0; let udpIndex = 0;
let currentUdpIndex = 0; let currentUdpIndex = 0;
let judgeUdpTimer let judgeUdpTimer
clearInterval(judgeUdpTimer) clearInterval(judgeUdpTimer)
judgeUdpTimer = setInterval(()=>{ judgeUdpTimer = setInterval(() => {
udpIndex += 1; udpIndex += 1;
},1000); }, 1000);
if(config && config[0] && config[0].udplocalIp){ if (config && config[0] && config[0].udplocalIp) {
const {udplocalIp} = config[0]; const {udplocalIp} = config[0];
const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080',globalThis.carInfo?.gpsAddress,globalThis.carInfo?.hintPort) const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080', globalThis.carInfo?.gpsAddress, globalThis.carInfo?.hintPort)
udpClient.bindUdp() udpClient.bindUdp()
udpClient.onMessage((val)=>{ udpClient.onMessage((val) => {
console.log('valval',val) console.log('valval', val)
}) })
globalThis.judgeUdpClient = udpClient; globalThis.judgeUdpClient = udpClient;
return { return {
send(bytes){ send(bytes) {
if(udpIndex > currentUdpIndex){ if (udpIndex > currentUdpIndex) {
udpClient.sendMsg({id:45,list:bytes,carNo:globalThis.carInfo.carNo,placeId:globalThis.carInfo.examinationRoomId}) udpClient.sendMsg({
id: 45,
list: bytes,
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId
})
currentUdpIndex = udpIndex currentUdpIndex = udpIndex
} }
} }

View File

@ -15,19 +15,21 @@
import socket from '@ohos.net.socket'; import socket from '@ohos.net.socket';
import { Array2Byte } from '../utils/tools' import { Array2Byte } from '../utils/tools'
import {getChuankouFn} from '../../common/service/indexService' import { getChuankouFn } from '../../common/service/indexService'
const TAG = '[PLC.UdpClient]' const TAG = '[PLC.UdpClient]'
import prompt from '@ohos.prompt' import prompt from '@ohos.prompt'
import hilog from '@ohos.hilog'; import hilog from '@ohos.hilog';
export default class UdpClient { export default class UdpClient {
private localIp: string = '' private localIp: string = ''
private localIpPort: string = '' private localIpPort: string = ''
private oppositeIp: string = '' private oppositeIp: string = ''
private oppositeIpPort: string = '' private oppositeIpPort: string = ''
private udp: any = null private udp: socket.UDPSocket = null
// private stashFn:StashFuncotion // private stashFn:StashFuncotion
constructor(udplocalIp: string, udplocalIpPort: string, udpOppositeIp: string, udpOppositeIpPort: string) { constructor(udplocalIp: string, udplocalIpPort: string, udpOppositeIp: string, udpOppositeIpPort: string) {
@ -46,7 +48,7 @@ export default class UdpClient {
this.oppositeIp = oppositeIp this.oppositeIp = oppositeIp
this.localIpPort = localIpPort this.localIpPort = localIpPort
this.oppositeIpPort = oppositeIpPort this.oppositeIpPort = oppositeIpPort
hilog.info(0x0000, 'udpCLient', 'rebind'+this.localIp+this.localIpPort); hilog.info(0x0000, 'udpCLient', 'rebind' + this.localIp + this.localIpPort);
let promise = this.udp.bind({ let promise = this.udp.bind({
address: this.localIp, port: parseInt(this.localIpPort), family: 1 address: this.localIp, port: parseInt(this.localIpPort), family: 1
}); });
@ -61,7 +63,7 @@ export default class UdpClient {
bindUdp() { bindUdp() {
console.log('localIp', this.localIp) console.log('localIp', this.localIp)
console.log('localIpPort', this.localIpPort) console.log('localIpPort', this.localIpPort)
hilog.info(0x0000, 'udpCLient', 'bind'+ this.localIp+this.localIpPort); hilog.info(0x0000, 'udpCLient', 'bind' + this.localIp + this.localIpPort);
let promise = this.udp.bind({ let promise = this.udp.bind({
address: '192.168.7.170', port: 20122, family: 1 address: '192.168.7.170', port: 20122, family: 1
@ -75,9 +77,11 @@ export default class UdpClient {
console.log(`${TAG}udpCLient udp bind failed:${JSON.stringify(err)}`); console.log(`${TAG}udpCLient udp bind failed:${JSON.stringify(err)}`);
}); });
} }
setMsgCallBack(callback){
setMsgCallBack(callback) {
// this.stashFn=callback?callback:()=>{} // this.stashFn=callback?callback:()=>{}
} }
sendMsg(msg) { sendMsg(msg) {
console.log('sendsnd01') console.log('sendsnd01')
hilog.info(0x0000, 'udpCLient', 'send'); hilog.info(0x0000, 'udpCLient', 'send');
@ -101,18 +105,19 @@ export default class UdpClient {
console.log(`${TAG}udpCLient udp send fail:${JSON.stringify(err)}`); console.log(`${TAG}udpCLient udp send fail:${JSON.stringify(err)}`);
}); });
} }
onError(callback?){
this.udp.on('error',async err => { onError(callback?) {
console.log('udpdiushierroring') this.udp.on('error', async err => {
hilog.info(0x0000, 'udpCLientonerror', 'error'+ JSON.stringify(err)); console.log('udpdiushierroring')
console.log("on error, err:" + JSON.stringify(err)) hilog.info(0x0000, 'udpCLientonerror', 'error' + JSON.stringify(err));
await this.bindUdp() console.log("on error, err:" + JSON.stringify(err))
await this.sendMsg('111') await this.bindUdp()
await this.onMessage(callback) await this.sendMsg('111')
// callback&&callback() await this.onMessage(callback)
// this.closeUdp(()=>{ // callback&&callback()
// this.bindUdp() // this.closeUdp(()=>{
// }) // this.bindUdp()
// })
}); });
} }
@ -144,14 +149,14 @@ export default class UdpClient {
} }
console.log(`${TAG} udp222 on message array buffer:${str}`); console.log(`${TAG} udp222 on message array buffer:${str}`);
strachArr[28]=globalThis.chuankoMsg||'0' strachArr[28] = globalThis.chuankoMsg || '0'
// this.stashFn(str) // this.stashFn(str)
const newArr=JSON.parse(JSON.stringify(strachArr)) const newArr = JSON.parse(JSON.stringify(strachArr))
// this.stashFn=()=>{} // this.stashFn=()=>{}
callback&&callback(newArr.toString()) callback && callback(newArr.toString())
} else { } else {
callback&&callback('') callback && callback('')
} }
console.log('messageTimeEnd') console.log('messageTimeEnd')
@ -183,41 +188,25 @@ export default class UdpClient {
}, 3000) }, 3000)
} }
closeUdp(callback) { closeUdp() {
return new Promise<void>((resolve, reject) => {
this.udp.close(err => { this.udp.close().then(() => {
hilog.info(0x0000, 'udpCLient', 'close'); hilog.info(0x0000, 'udpClient', 'close');
return this.udp.getState()
if (err) { }).then((data) => {
hilog.info(0x0000, 'udpCLient', 'closeonerror'); if (!data.isClose) {
setTimeout(() => {
} else { resolve()
this.udp.getState((err, data) => { }, 1000)
if (err) { }
console.log('getState fail'); }).catch(err => {
return; hilog.error(0x0000, 'udpClient', err);
} else { reject(err)
if (!data.isisClose) { })
setTimeout(() => { })
callback()
}, 1000)
}
}
console.log('getState success:' + JSON.stringify(data));
})
// let promise = this.udp.getState({});
// promise.then(data => {
//
// console.log('getState success:' + JSON.stringify(data));
// }).catch(err => {
// callback()
// console.log('getState fail');
// });
}
});
} }
} }
interface StashFunction { interface StashFunction {
(str: string) (str: string)
} }

View File

@ -17,8 +17,9 @@ import socket from '@ohos.net.socket';
import fs from '@ohos.file.fs' import fs from '@ohos.file.fs'
import mediaLibrary from '@ohos.multimedia.mediaLibrary' import mediaLibrary from '@ohos.multimedia.mediaLibrary'
import FileUtil from '../../common/utils/File' import FileUtil from '../../common/utils/File'
import {fillZero,string2Bytes} from '../utils/tools' import { fillZero, string2Bytes } from '../utils/tools'
import { GlobalConfig } from '../../config/index' import { GlobalConfig } from '../../config/index'
const TAG = '[UdpDemo.UdpClient]' const TAG = '[UdpDemo.UdpClient]'
// import common from '@ohos.app.ability.common'; // import common from '@ohos.app.ability.common';
import hilog from '@ohos.hilog'; import hilog from '@ohos.hilog';
@ -27,216 +28,230 @@ import call from '@ohos.telephony.call';
export default class UdpClientByCenter { export default class UdpClientByCenter {
private localIp: string = '' private localIp: string = ''
private localIpPort: string = '' private localIpPort: string = ''
private oppositeIp: string = '' private oppositeIp: string = ''
private oppositeIpPort: string = '' private oppositeIpPort: string = ''
private udpMsg: any='' private udpMsg: any = ''
private num:number = 0 private num: number = 0
private fileUtil: FileUtil private fileUtil: FileUtil
private udp: any = null private udp: any = null
private sendId: any = 0 private sendId: any = 0
private lsh: string = null private lsh: string = null
private context private context
private stashFn:StashFunction private stashFn: StashFunction
private headLenth:number=9 //消息头长度 private headLenth: number = 9
private initParam //消息头长度
constructor(udplocalIp: string, udplocalIpPort:string,udpOppositeIp: string,udpOppositeIpPort:string) { private initParam
this.localIp = udplocalIp
this.oppositeIp = udpOppositeIp constructor(udplocalIp: string, udplocalIpPort: string, udpOppositeIp: string, udpOppositeIpPort: string) {
this.localIpPort = udplocalIpPort this.localIp = udplocalIp
this.oppositeIpPort = udpOppositeIpPort this.oppositeIp = udpOppositeIp
this.stashFn=()=>{} this.localIpPort = udplocalIpPort
this.udp = socket.constructUDPSocketInstance(); this.oppositeIpPort = udpOppositeIpPort
this.stashFn = () => {
} }
rebindUdp(localIp: string, localIpPort:string,oppositeIp: string,oppositeIpPort:string){ this.udp = socket.constructUDPSocketInstance();
this.localIp = localIp }
this.oppositeIp = oppositeIp
this.localIpPort = localIpPort
this.oppositeIpPort = oppositeIpPort
let promise = this.udp.bind({ rebindUdp(localIp: string, localIpPort: string, oppositeIp: string, oppositeIpPort: string) {
// address: '192.168.7.170', port: 20122, family: 1 this.localIp = localIp
address: this.localIp, port: parseInt(this.localIpPort), family: 1 this.oppositeIp = oppositeIp
}); this.localIpPort = localIpPort
this.oppositeIpPort = oppositeIpPort
promise.then(() => { let promise = this.udp.bind({
console.log(`${TAG} udp bind success`); // address: '192.168.7.170', port: 20122, family: 1
}).catch(err => { address: this.localIp, port: parseInt(this.localIpPort), family: 1
});
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`); promise.then(() => {
}); console.log(`${TAG} udp bind success`);
}).catch(err => {
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`);
});
}
initHeartSendMsg(param, context) {
this.initParam = param
this.context = context
}
bindUdp() {
let promise = this.udp.bind({
address: this.localIp, port: parseInt(this.localIpPort), family: 1
});
promise.then(() => {
console.log(`${TAG} udp bind success`);
}).catch(err => {
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`);
});
}
//异或运算
setMessageExclusive(tmpList) {
let result = tmpList[0];
for (let i = 1; i < tmpList.length; i++) {
result = result ^ tmpList[i]
} }
initHeartSendMsg(param,context){ return [result];
this.initParam=param }
this.context=context
}
bindUdp() {
let promise = this.udp.bind({
address: this.localIp, port: parseInt(this.localIpPort), family: 1
});
promise.then(() => {
console.log(`${TAG} udp bind success`);
}).catch(err => {
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`); Array2Byte(array) {
}); var buf = new ArrayBuffer(array.length);
var view = new Uint8Array(buf);
for (var i = 0; i != array.length; ++i) {
view[i] = array[i] & 0xFF;
} }
return view;
}
//异或运算 //length消息体bufferlength id消息类型id bodyStr消息体string
setMessageExclusive(tmpList){ // setMsyBody(id,bodyByte){
let result = tmpList[0];
for (let i = 1; i < tmpList.length; i++) { // {id: 31,list:[0,1,'0000000000000'],carNo:489,placeId:62}
result = result ^ tmpList[i] setWholeMsg(params) {
let head = this.setMsgHead(params);
let headJudge = this.setMessageExclusive(head);
let body = this.setMsgBody(params);
let bodyJudge = this.setMessageExclusive(body);
let end = [13, 10];
const arr = [...head, ...headJudge, ...body, ...bodyJudge, ...end]
console.log('BitArray', arr)
return this.Array2Byte(arr).buffer
}
setMsgHead({id, list, placeId=62, carNo=489}) {
let a = string2Bytes(`${id}${fillZero(placeId, 3)}`, 2 * 8);
let b = string2Bytes(`${carNo}${this.lsh}`, 4 * 8);
let c = string2Bytes(list.length, 2 * 8);
return [...a, ...b, ...c];
}
setMsgBody({id,list}) {
let tmpList = []
tmpList = list
return tmpList;
}
sendHeadMsg(msgData) {
console.log('sendsnd1')
//udpOppositeIp
let promise = this.udp.send({
data: msgData,
address: {
address: this.oppositeIp,
port: parseInt(this.oppositeIpPort),
}
});
promise.then(() => {
console.log(`${TAG} udpLine send success:`);
}).catch(err => {
console.log(`${TAG} udpLine send fail:${JSON.stringify(err)}`);
});
}
setMsgCallBack(callback) {
this.stashFn = callback ? callback : () => {
}
}
sendMsg(param, context?) {
console.log('paramparam', JSON.stringify(param))
if (context) {
this.context = context
}
this.sendId = param.id
console.log('sendMsg', JSON.stringify(param))
const msgData = this.setWholeMsg(param)
// const msgData=this.setMsyBody('31','010000000000000')
let promise = this.udp.send({
data: msgData,
address: {
address: this.oppositeIp,
port: parseInt(this.oppositeIpPort),
}
});
promise.then(() => {
if (param.sendCallback) {
param.sendCallback()
}
// if(this.sendId=='46'&&param.callback){
// param.callback()
// }
console.log(`${TAG} udp send success:`);
}).catch(err => {
console.log(`${TAG} udp send fail:${JSON.stringify(err)}`);
});
}
onMessage(callback, type?) {
this.udp.on('message', value => {
let arr = []
let dataView = new DataView(value.message)
for (let i = 0; i < dataView?.byteLength; ++i) {
arr[i] = dataView?.getUint8(i)
}
let idNum = '0x' + fillZero(arr[1].toString(16), 2) + fillZero(arr[0].toString(16), 2);
let id = Math.floor(+idNum / 1000)
hilog.info(0x0000, 'bitbit', JSON.stringify(arr));
let lengthNum = '0x' + fillZero(arr[7].toString(16), 2) + fillZero(arr[6].toString(16), 2);
let length = +lengthNum;
let list = []
for (let i = this.headLenth; i <= this.headLenth + length - 1; i++) {
list.push(arr[i])
}
this.stashFn({
id, length, body: list, sendId: this.sendId
})
callback({
id, length, body: list, sendId: this.sendId
})
});
}
onError(callback?) {
this.udp.on('error', err => {
console.log('udpbycenterdiushierroring')
hilog.info(0x0000, 'udpCLientBycenteronerror', 'error' + JSON.stringify(err));
console.log("on error, err:" + JSON.stringify(err))
// this.closeUdp(()=>{
// this.bindUdp()
// })
});
}
closeUdp() {
return new Promise<void>((resolve, reject) => {
this.udp.close().then(() => {
hilog.info(0x0000, 'udpClient', 'close');
return this.udp.getState()
}).then((data) => {
if (!data.isClose) {
setTimeout(() => {
resolve()
}, 1000)
} }
return [result]; }).catch(err => {
} hilog.error(0x0000, 'udpClient', err);
Array2Byte(array) { reject(err)
var buf = new ArrayBuffer(array.length); })
var view = new Uint8Array(buf); })
for (var i = 0; i != array.length; ++i) }
{
view[i] = array[i] & 0xFF;
}
return view;
}
//length消息体bufferlength id消息类型id bodyStr消息体string
// setMsyBody(id,bodyByte){
// {id: 31,list:[0,1,'0000000000000'],carNo:489,placeId:62}
setWholeMsg(params){
let head = this.setMsgHead(params);
let headJudge = this.setMessageExclusive(head);
let body = this.setMsgBody(params);
let bodyJudge = this.setMessageExclusive(body);
let end = [13,10];
const arr=[...head, ...headJudge,...body, ...bodyJudge,...end]
console.log('BitArray',arr)
return this.Array2Byte(arr).buffer
}
setMsgHead({id, list, placeId=62, carNo=489}){
let a = string2Bytes(`${id}${fillZero(placeId,3)}`, 2*8);
let b = string2Bytes(`${carNo}${this.lsh}`, 4*8);
let c = string2Bytes(list.length, 2*8);
return [...a,...b,...c];
}
setMsgBody({id,list}) {
let tmpList = []
tmpList = list
return tmpList ;
}
sendHeadMsg(msgData){
console.log('sendsnd1')
//udpOppositeIp
let promise = this.udp.send({
data: msgData,
address: {
address: this.oppositeIp,
port: parseInt(this.oppositeIpPort),
}
});
promise.then(() => {
console.log(`${TAG} udpLine send success:`);
}).catch(err => {
console.log(`${TAG} udpLine send fail:${JSON.stringify(err)}`);
});
}
setMsgCallBack(callback){
this.stashFn=callback?callback:()=>{}
}
sendMsg(param,context?) {
console.log('paramparam',JSON.stringify(param))
if(context){
this.context=context
}
this.sendId=param.id
console.log('sendMsg',JSON.stringify(param))
const msgData=this.setWholeMsg(param)
// const msgData=this.setMsyBody('31','010000000000000')
let promise = this.udp.send({
data: msgData,
address: {
address: this.oppositeIp,
port: parseInt(this.oppositeIpPort),
}
});
promise.then(() => {
if(param.sendCallback){
param.sendCallback()
}
// if(this.sendId=='46'&&param.callback){
// param.callback()
// }
console.log(`${TAG} udp send success:`);
}).catch(err => {
console.log(`${TAG} udp send fail:${JSON.stringify(err)}`);
});
}
onMessage(callback,type?) {
this.udp.on('message', value => {
let arr=[]
let dataView = new DataView(value.message)
for (let i = 0;i < dataView?.byteLength; ++i) {
arr[i]=dataView?.getUint8(i)
}
let idNum = '0x' + fillZero(arr[1].toString(16),2) + fillZero(arr[0].toString(16),2) ;
let id = Math.floor(+idNum/1000)
hilog.info(0x0000, 'bitbit', JSON.stringify(arr));
let lengthNum = '0x' + fillZero(arr[7].toString(16),2) + fillZero(arr[6].toString(16),2) ;
let length= +lengthNum;
let list=[]
for(let i=this.headLenth;i<=this.headLenth+length-1;i++){
list.push(arr[i])
}
this.stashFn({id,length,body:list,sendId:this.sendId})
callback({id,length,body:list,sendId:this.sendId})
});
}
onError(callback?){
this.udp.on('error', err => {
console.log('udpbycenterdiushierroring')
hilog.info(0x0000, 'udpCLientBycenteronerror', 'error'+ JSON.stringify(err));
console.log("on error, err:" + JSON.stringify(err))
// this.closeUdp(()=>{
// this.bindUdp()
// })
});
}
closeUdp(callback) {
this.udp.close(err=>{
if(err){
}else{
this.udp.getState((err, data) => {
if (err) {
return;
}else{
if(!data.isisClose){
setTimeout(()=>{
callback()
},1000)
}
}
})
// let promise = this.udp.getState({});
// promise.then(data => {
//
// console.log('getState success:' + JSON.stringify(data));
// }).catch(err => {
// callback()
// console.log('getState fail');
// });
}
});
}
} }
interface StashFunction { interface StashFunction {
(params: { id: number; length: number; body: any[]; sendId: string }): void; (params: {
id: number;
length: number;
body: any[];
sendId: string
}): void;
} }