济南修改 #25
@ -1,122 +1,114 @@
|
||||
//import UdpClient from './UdpClient';
|
||||
import UdpClientByCenter from './UdpClientByCenter';
|
||||
import { getSyncData} from '../service/initable'
|
||||
import {getChuankouFn} from '../../common/service/indexService'
|
||||
export async function sendMsg(val){
|
||||
import { getSyncData } from '../service/initable'
|
||||
import { getChuankouFn } from '../../common/service/indexService'
|
||||
|
||||
export async function sendMsg(val) {
|
||||
// globalThis.udpClient1&&globalThis.udpClient1.sendMsg(val)
|
||||
}
|
||||
|
||||
export async function getUDP() {
|
||||
console.log(` getUDP enter`);
|
||||
getSyncData('IpConfigTable').then((result:Array<any>)=>
|
||||
{
|
||||
if(result.length)
|
||||
{
|
||||
getSyncData('IpConfigTable').then((result: Array<any>) => {
|
||||
if (result.length) {
|
||||
console.log(` getUDP has IPConfigTable `);
|
||||
if(globalThis.udpClient&&globalThis.udpClient.closeUdp)
|
||||
{
|
||||
console.log(` getUDP has udclent close and rebind `);
|
||||
globalThis.udpClient.closeUdp(()=>{
|
||||
setTimeout(()=>{
|
||||
globalThis.udpClient.rebindUdp(result[0].udplocalIp, result[0].udplocalIpPort,result[0].udpOppositeIp,result[0].udpOppositeIpPort)
|
||||
globalThis.udpClient.sendMsg('111',null)
|
||||
globalThis.host=`http://${result[0].centerIp}:${result[0].centerPort}`
|
||||
// globalThis.udpClient.onError_resend(globalThis.udpClient.onMessage?globalThis.udpClient.onMessage:()=>{})
|
||||
},1000)
|
||||
})
|
||||
if (globalThis.udpClient && globalThis.udpClient.closeUdp) {
|
||||
console.log(` getUDP has udclent close and rebind `);
|
||||
globalThis.udpClient.closeUdp(() => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient.rebindUdp(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp, result[0].udpOppositeIpPort)
|
||||
globalThis.udpClient.sendMsg('111', null)
|
||||
globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
|
||||
globalThis.udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
|
||||
}, 1000)
|
||||
})
|
||||
}
|
||||
else{
|
||||
else {
|
||||
// 未绑定
|
||||
console.log(` getUDP has no udclent and bind `);
|
||||
const udpClient: UdpClientByCenter =new UdpClientByCenter(result[0].udplocalIp, result[0].udplocalIpPort,result[0].udpOppositeIp,result[0].udpOppositeIpPort)
|
||||
const udpClient: UdpClientByCenter = new UdpClientByCenter(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp, result[0].udpOppositeIpPort)
|
||||
udpClient.bindUdp()
|
||||
udpClient.sendMsg('111')
|
||||
globalThis.host=`http://${result[0].centerIp}:${result[0].centerPort}`
|
||||
// udpClient.onError_resend(globalThis.udpClient.onMessage?globalThis.udpClient.onMessage:()=>{})
|
||||
globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
|
||||
// udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
|
||||
globalThis.udpClient = udpClient
|
||||
getChuankouFn()
|
||||
}
|
||||
|
||||
}else
|
||||
{
|
||||
} else {
|
||||
console.log(` getUDP has no IPConfigTable `);
|
||||
// if(globalThis.udpClient)
|
||||
// {
|
||||
// console.log(` getUDP2 has IPConfigTable ,has udpClient ,close it`);
|
||||
// globalThis.udpClient.closeUdp(async ()=>{ })
|
||||
// }
|
||||
globalThis.udpClient={}
|
||||
globalThis.udpClient.onMessage_1=()=>{}
|
||||
globalThis.host=''
|
||||
globalThis.udpClient = {}
|
||||
globalThis.udpClient.onMessage_1 = () => {}
|
||||
globalThis.host = ''
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export async function getUDP2() {
|
||||
console.log(` getUDP2 enter`);
|
||||
getSyncData('IpConfigTable').then(async (result:Array<any>)=>{
|
||||
if(result.length)
|
||||
{
|
||||
getSyncData('IpConfigTable').then(async (result: Array<any>) => {
|
||||
if (result.length) {
|
||||
console.log(` getUDP2 has IPConfigTable `);
|
||||
if(globalThis.udpClient2)
|
||||
{
|
||||
console.log(` getUDP2 has udclent ,close and rebind `);
|
||||
globalThis.udpClient2.closeUdp(async ()=>{
|
||||
setTimeout(()=>{
|
||||
globalThis.udpClient2.rebindUdp(result[0].udplocalIp, '8800',globalThis.carInfo?.udpAddress,globalThis.carInfo?.messagePort)
|
||||
//保留原来的
|
||||
// globalThis.udpClient2.onMessage((val)=>{ })
|
||||
// globalThis.udpClient2.onError()
|
||||
// globalThis.udpClient2.setMsgCallBack=()=>{}
|
||||
},1000)
|
||||
})
|
||||
if (globalThis.udpClient2 && globalThis.udpClient2.closeUdp) {
|
||||
console.log(` getUDP2 has udclent ,close and rebind `);
|
||||
globalThis.udpClient2.closeUdp(async () => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient2.rebindUdp(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
|
||||
}, 1000)
|
||||
})
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
// 未绑定
|
||||
console.log(` getUDP2 has no udclent and bind `);
|
||||
const udpClient2: UdpClientByCenter =new UdpClientByCenter(result[0].udplocalIp, '8800',globalThis.carInfo?.udpAddress,globalThis.carInfo?.messagePort)
|
||||
const udpClient2: UdpClientByCenter = new UdpClientByCenter(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
|
||||
|
||||
udpClient2.bindUdp()
|
||||
udpClient2.onError_Callback()
|
||||
udpClient2.onMessage_1((val)=>{
|
||||
if(val.id=='32'){
|
||||
globalThis.signNum=val.body[1]
|
||||
udpClient2.onMessage_1((val) => {
|
||||
if (val.id == '32') {
|
||||
globalThis.signNum = val.body[1]
|
||||
|
||||
}else if(val.id=='46'){
|
||||
} else if (val.id == '46') {
|
||||
let tmpList = []
|
||||
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])
|
||||
}
|
||||
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 = udpClient2
|
||||
}
|
||||
}else{
|
||||
console.log(` getUDP2 has no IPConfigTable `);
|
||||
if(globalThis.udpClient2)
|
||||
{
|
||||
console.log(` getUDP2 has IPConfigTable ,has udpClient ,close it`);
|
||||
globalThis.udpClient2.closeUdp(async ()=>{ })
|
||||
} else {
|
||||
globalThis.udpClient2 = {}
|
||||
globalThis.udpClient2.onMessage_2 = () => {
|
||||
}
|
||||
globalThis.udpClient2.setMsgCallBack = () => {
|
||||
}
|
||||
globalThis.udpClient2={}
|
||||
globalThis.udpClient2.onMessage_2=()=>{}
|
||||
globalThis.udpClient2.setMsgCallBack=()=>{}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export async function setTopLineUdp(){
|
||||
export async function setTopLineUdp() {
|
||||
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 udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '55509',udpOppositeIp,udpOppositeIpPort)
|
||||
const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '55509', udpOppositeIp, udpOppositeIpPort)
|
||||
udpClient.bindUdp()
|
||||
|
||||
return {
|
||||
send(bytes){
|
||||
send(bytes) {
|
||||
udpClient.sendHeadMsg(bytes)
|
||||
}
|
||||
}
|
||||
@ -124,32 +116,32 @@ export async function setTopLineUdp(){
|
||||
}
|
||||
|
||||
//
|
||||
export async function setJudgeUdp(){
|
||||
export async function setJudgeUdp() {
|
||||
const config = await getSyncData('IpConfigTable');
|
||||
|
||||
let udpIndex = 0;
|
||||
let currentUdpIndex = 0;
|
||||
let judgeUdpTimer
|
||||
clearInterval(judgeUdpTimer)
|
||||
judgeUdpTimer = setInterval(()=>{
|
||||
judgeUdpTimer = setInterval(() => {
|
||||
udpIndex += 1;
|
||||
},1000);
|
||||
}, 1000);
|
||||
|
||||
if(config && config[0] && config[0].udplocalIp){
|
||||
if (config && config[0] && config[0].udplocalIp) {
|
||||
const {udplocalIp} = config[0];
|
||||
const udpClientbyCenter: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080',globalThis.carInfo?.gpsAddress,globalThis.carInfo?.hintPort)
|
||||
const udpClientbyCenter: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080', globalThis.carInfo?.gpsAddress, globalThis.carInfo?.hintPort)
|
||||
udpClientbyCenter.bindUdp()
|
||||
udpClientbyCenter.onMessage_1((val)=>{
|
||||
console.log('valval',val)
|
||||
udpClientbyCenter.onMessage_1((val) => {
|
||||
console.log('valval', val)
|
||||
})
|
||||
// globalThis.judgeUdpClient = udpClientbyCenter;
|
||||
// globalThis.judgeUdpClient = udpClientbyCenter;
|
||||
return {
|
||||
send(bytes){
|
||||
if(udpIndex > currentUdpIndex){
|
||||
udpClientbyCenter.sendMsgExt({id:45,
|
||||
list:bytes,
|
||||
carNo:globalThis.carInfo.carNo,
|
||||
placeId:globalThis.carInfo.examinationRoomId})
|
||||
send(bytes) {
|
||||
if (udpIndex > currentUdpIndex) {
|
||||
udpClientbyCenter.sendMsgExt({ id: 45,
|
||||
list: bytes,
|
||||
carNo: globalThis.carInfo.carNo,
|
||||
placeId: globalThis.carInfo.examinationRoomId })
|
||||
currentUdpIndex = udpIndex
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,338 +13,336 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import socket ,{UDPSocket} from '@ohos.net.socket';
|
||||
// @ts-ignore
|
||||
import socket, { UDPSocket } from '@ohos.net.socket';
|
||||
import { Array2Byte } from '../utils/tools'
|
||||
import FileUtil from '../../common/utils/File'
|
||||
import {fillZero,string2Bytes} from '../utils/tools'
|
||||
import { fillZero, string2Bytes } from '../utils/tools'
|
||||
|
||||
const TAG = '[UdpDemo.UdpClient]'
|
||||
import hilog from '@ohos.hilog';
|
||||
import prompt from '@ohos.prompt'
|
||||
|
||||
|
||||
export default class UdpClientByCenter {
|
||||
private localIp: string = ''
|
||||
private localIpPort: string = ''
|
||||
private oppositeIp: string = ''
|
||||
private oppositeIpPort: string = ''
|
||||
private udpMsg: any=''
|
||||
private num:number = 0
|
||||
private fileUtil: FileUtil
|
||||
private udp: UDPSocket = null
|
||||
private sendId: any = 0
|
||||
private lsh: string = null
|
||||
private context
|
||||
private stashFn:StashFunction
|
||||
private headLenth:number=9 //消息头长度
|
||||
private isWorking:Boolean = false
|
||||
private plcUdpError = false;
|
||||
private initParam
|
||||
constructor(udplocalIp: string, udplocalIpPort:string,udpOppositeIp: string,udpOppositeIpPort:string) {
|
||||
this.localIp = udplocalIp
|
||||
this.oppositeIp = udpOppositeIp
|
||||
this.localIpPort = udplocalIpPort
|
||||
this.oppositeIpPort = udpOppositeIpPort
|
||||
this.stashFn=()=>{}
|
||||
this.udp = socket.constructUDPSocketInstance();
|
||||
}
|
||||
getStatus()
|
||||
{
|
||||
return this.isWorking
|
||||
}
|
||||
rebindUdp(localIp: string, localIpPort:string,oppositeIp: string,oppositeIpPort:string){
|
||||
this.localIp = localIp
|
||||
this.oppositeIp = oppositeIp
|
||||
this.localIpPort = localIpPort
|
||||
this.oppositeIpPort = oppositeIpPort
|
||||
private localIp: string = ''
|
||||
private localIpPort: string = ''
|
||||
private oppositeIp: string = ''
|
||||
private oppositeIpPort: string = ''
|
||||
private udpMsg: any = ''
|
||||
private num: number = 0
|
||||
private fileUtil: FileUtil
|
||||
private udp: UDPSocket = null
|
||||
private sendId: any = 0
|
||||
private lsh: string = null
|
||||
private context
|
||||
private stashFn: StashFunction
|
||||
private headLenth: number = 9
|
||||
//消息头长度
|
||||
private isWorking: Boolean = false
|
||||
private plcUdpError = false;
|
||||
private initParam
|
||||
|
||||
let promise = this.udp.bind({
|
||||
// address: '192.168.7.170', port: 20122, family: 1
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
});
|
||||
|
||||
promise.then(() => {
|
||||
// globalThis.closeHeartSocket=false
|
||||
this.isWorking = true
|
||||
console.log(`${TAG} udp bind success`);
|
||||
}).catch(err => {
|
||||
//globalThis.closeHeartSocket=true
|
||||
this.isWorking = false
|
||||
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`);
|
||||
});
|
||||
constructor(udplocalIp: string, udplocalIpPort: string, udpOppositeIp: string, udpOppositeIpPort: string) {
|
||||
this.localIp = udplocalIp
|
||||
this.oppositeIp = udpOppositeIp
|
||||
this.localIpPort = udplocalIpPort
|
||||
this.oppositeIpPort = udpOppositeIpPort
|
||||
this.stashFn = () => {
|
||||
}
|
||||
this.udp = socket.constructUDPSocketInstance();
|
||||
}
|
||||
|
||||
bindUdp() {
|
||||
let promise = this.udp.bind({
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
getStatus() {
|
||||
return this.isWorking
|
||||
}
|
||||
|
||||
rebindUdp(localIp: string, localIpPort: string, oppositeIp: string, oppositeIpPort: string) {
|
||||
this.localIp = localIp
|
||||
this.oppositeIp = oppositeIp
|
||||
this.localIpPort = localIpPort
|
||||
this.oppositeIpPort = oppositeIpPort
|
||||
|
||||
let promise = this.udp.bind({
|
||||
// address: '192.168.7.170', port: 20122, family: 1
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
});
|
||||
|
||||
promise.then(() => {
|
||||
// globalThis.closeHeartSocket=false
|
||||
this.isWorking = true
|
||||
console.log(`${TAG} udp bind success`);
|
||||
}).catch(err => {
|
||||
//globalThis.closeHeartSocket=true
|
||||
this.isWorking = false
|
||||
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`);
|
||||
});
|
||||
}
|
||||
|
||||
bindUdp() {
|
||||
let promise = this.udp.bind({
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
});
|
||||
promise.then(() => {
|
||||
this.isWorking = true
|
||||
console.log(`${TAG} udp bind success`);
|
||||
}).catch(err => {
|
||||
this.isWorking = false
|
||||
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]
|
||||
}
|
||||
return [result];
|
||||
}
|
||||
|
||||
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
|
||||
// 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}) {
|
||||
console.log('globalThis.lshNo', globalThis.lshNo)
|
||||
let a = string2Bytes(`${id}${fillZero(placeId, 3)}`, 2 * 8);
|
||||
console.log('aaa', a)
|
||||
let b = string2Bytes(`${fillZero(carNo, 4)}${globalThis.lshNo}`, 4 * 8);
|
||||
console.log('bbb', b)
|
||||
let c = string2Bytes(list.length, 2 * 8);
|
||||
return [...a, ...b, ...c];
|
||||
}
|
||||
|
||||
setMsgBody({id,list}) {
|
||||
let tmpList = []
|
||||
tmpList = list
|
||||
|
||||
return tmpList;
|
||||
|
||||
}
|
||||
|
||||
sendHeadMsg(msgData) {
|
||||
console.log('sendHeadMsg enter')
|
||||
this.sendMsg(msgData, null)
|
||||
console.log('sendHeadMsg exit')
|
||||
}
|
||||
|
||||
sendMsg(msg, sendCallback?) {
|
||||
if (!this.isWorking && sendCallback) {
|
||||
sendCallback()
|
||||
}
|
||||
this.udp.getState((err, data) => {
|
||||
if (err) {
|
||||
this.isWorking = false
|
||||
return;
|
||||
} else {
|
||||
let promise = this.udp.send({
|
||||
data: msg,
|
||||
address: {
|
||||
address: this.oppositeIp,
|
||||
port: parseInt(this.oppositeIpPort),
|
||||
}
|
||||
});
|
||||
promise.then(() => {
|
||||
// /globalThis.closeHeartSocket=false
|
||||
this.isWorking = true
|
||||
console.log(`${TAG} udp bind success`);
|
||||
if (sendCallback) {
|
||||
sendCallback()
|
||||
}
|
||||
console.log(`${TAG}udpCLient udp send success:oppositeIp${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort,${this.localIpPort}`);
|
||||
}).catch(err => {
|
||||
// globalThis.closeHeartSocket=true
|
||||
this.isWorking = false
|
||||
console.log(`${TAG} udp bind failed:${JSON.stringify(err)}`);
|
||||
console.log(`${TAG}udpCLient udp send fail:oppositeIp${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort,${this.localIpPort}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
console.log('getState success:' + JSON.stringify(data));
|
||||
})
|
||||
}
|
||||
|
||||
//异或运算
|
||||
setMessageExclusive(tmpList){
|
||||
let result = tmpList[0];
|
||||
for (let i = 1; i < tmpList.length; i++) {
|
||||
result = result ^ tmpList[i]
|
||||
sendMsgExt(param, context?) {
|
||||
console.log('sendMsgExt enter');
|
||||
if (context) {
|
||||
this.context = context
|
||||
}
|
||||
this.sendId = param.id
|
||||
const msgData = this.setWholeMsg(param)
|
||||
this.sendMsg(msgData, param.sendCallback)
|
||||
}
|
||||
|
||||
onError_Callback(callback?) {
|
||||
this.udp.on('error', async err => {
|
||||
this.isWorking = false;
|
||||
console.log('UdpClientByCenter onError err:' + JSON.stringify(err));
|
||||
callback && callback()
|
||||
});
|
||||
}
|
||||
|
||||
onError_resend(callback?) {
|
||||
this.udp.on('error', async err => {
|
||||
this.isWorking = false;
|
||||
console.log(TAG, 'udpError', JSON.stringify(err))
|
||||
await this.bindUdp()
|
||||
await this.sendMsg('111', null)
|
||||
await this.onMessage_1(callback)
|
||||
callback && callback()
|
||||
});
|
||||
}
|
||||
|
||||
setMsgCallBack(callback) {
|
||||
this.stashFn = callback ? callback : () => {
|
||||
}
|
||||
}
|
||||
//中心udp回执
|
||||
onMessage_2(callback, type?) {
|
||||
this.udp.on('message', (value, remoteInfo) => {
|
||||
console.log('UdpClientByCenter onMessage msg:' + JSON.stringify(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
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
closeUdp(callback?) {
|
||||
console.log('UdpClientByCenter enter closeUdp ip:' + this.localIp + ' port:' + this.localIpPort);
|
||||
this.udp.on('close', () => {
|
||||
console.log('UdpClientByCenter onClose ip:' + this.localIp + ' port:' + this.localIpPort);
|
||||
this.isWorking = false
|
||||
if (callback != null) {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
)
|
||||
this.udp.close(err => {
|
||||
if (err) {
|
||||
console.log('UdpClientByCenter closeUdp failed ip:' + this.localIp + ' port:' + this.localIpPort + ' err:' + JSON.stringify(err));
|
||||
} else {
|
||||
console.log('UdpClientByCenter closeUdp succeed ip:' + this.localIp + ' port:' + this.localIpPort);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//plc
|
||||
onMessage_1(callback?) {
|
||||
this.udp.on('message', value => {
|
||||
console.log(TAG, 'udponmessage')
|
||||
// 收到的是ArrayBuffer 需要进行转换解析
|
||||
this.plcUdpError = false
|
||||
if (value) {
|
||||
let dataView = new DataView(value.message)
|
||||
let str = ""
|
||||
for (let i = 0; i < dataView?.byteLength; ++i) {
|
||||
let c = String.fromCharCode(dataView?.getUint8(i))
|
||||
if (c !== "\n") {
|
||||
str += c
|
||||
}
|
||||
}
|
||||
return [result];
|
||||
}
|
||||
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;
|
||||
|
||||
console.log(`${TAG} udp on message array buffer:${str}`);
|
||||
let strachArr = str.split(',')
|
||||
if (strachArr[0] != '#DN_GD') {
|
||||
return
|
||||
}
|
||||
return view;
|
||||
}
|
||||
//length消息体bufferlength id消息类型id bodyStr消息体string
|
||||
// setMsyBody(id,bodyByte){
|
||||
console.log(`${TAG} udp222 on message array buffer:${str}`);
|
||||
|
||||
// {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
|
||||
strachArr[28] = globalThis.chuankoMsg || '0'
|
||||
// this.stashFn(str)
|
||||
const newArr = JSON.parse(JSON.stringify(strachArr))
|
||||
// this.stashFn=()=>{}
|
||||
callback && callback(newArr.toString())
|
||||
|
||||
}
|
||||
setMsgHead({id, list, placeId=62, carNo=489}){
|
||||
console.log('globalThis.lshNo',globalThis.lshNo)
|
||||
let a = string2Bytes(`${id}${fillZero(placeId,3)}`, 2*8);
|
||||
console.log('aaa',a)
|
||||
let b = string2Bytes(`${fillZero(carNo,4)}${globalThis.lshNo}`, 4*8);
|
||||
console.log('bbb',b)
|
||||
let c = string2Bytes(list.length, 2*8);
|
||||
return [...a,...b,...c];
|
||||
}
|
||||
setMsgBody({id,list}) {
|
||||
let tmpList = []
|
||||
tmpList = list
|
||||
} else {
|
||||
callback && callback('')
|
||||
}
|
||||
console.log('messageTimeEnd')
|
||||
this.testIfUdpConnetced(callback)
|
||||
});
|
||||
}
|
||||
|
||||
return tmpList ;
|
||||
|
||||
}
|
||||
|
||||
sendHeadMsg(msgData){
|
||||
console.log('sendHeadMsg enter')
|
||||
this.sendMsg(msgData,null)
|
||||
console.log('sendHeadMsg exit')
|
||||
}
|
||||
|
||||
sendMsg(msg,sendCallback?) {
|
||||
console.log(TAG,'sendMsg enter status:'+this.isWorking+' ip:'+this.oppositeIp+' port:'+this.oppositeIpPort)
|
||||
if(!this.isWorking)
|
||||
{
|
||||
console.log(TAG,'sendMsg has not working ,just return status:'+this.isWorking+' ip:'+this.oppositeIp+' port:'+this.oppositeIpPort)
|
||||
if(sendCallback){
|
||||
sendCallback()
|
||||
}
|
||||
testIfUdpConnetced(callback) {
|
||||
const arrRed = [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00];
|
||||
const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00];
|
||||
const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01];
|
||||
const arrBlueBuffer = Array2Byte(arrBlue).buffer
|
||||
const arrRedBuffer = Array2Byte(arrRed).buffer
|
||||
const arrGreenBugger = Array2Byte(arrGreen).buffer
|
||||
let num = 0
|
||||
//监听udp是否断开
|
||||
clearInterval(globalThis.messageTimer)
|
||||
globalThis.messageTimer = setInterval(() => {
|
||||
const lightLineUdp = globalThis.lightLineUdp
|
||||
const isJudge = globalThis.isJudge
|
||||
setTimeout(async () => {
|
||||
//程序断开
|
||||
lightLineUdp?.send(this.plcUdpError ? arrRedBuffer : (isJudge ? arrGreenBugger : arrBlueBuffer));
|
||||
if (this.plcUdpError) {
|
||||
num++
|
||||
console.log(TAG, 'plc udp信号丢失')
|
||||
if (num == 3) {
|
||||
await this.bindUdp()
|
||||
await this.sendMsg('111', null)
|
||||
await this.onMessage_1(callback)
|
||||
num = 0
|
||||
}
|
||||
prompt.showToast({
|
||||
message: 'plc udp信号丢失',
|
||||
duration: 2000
|
||||
});
|
||||
}
|
||||
this.udp.getState((err, data) => {
|
||||
if (err) {
|
||||
//globalThis.closeHeartSocket=true
|
||||
this.isWorking = false
|
||||
console.log('sendMsg getState fail ip:'+this.oppositeIp+' port:'+this.oppositeIpPort);
|
||||
return;
|
||||
} else {
|
||||
let promise = this.udp.send({
|
||||
data: msg,
|
||||
address: {
|
||||
address: this.oppositeIp,
|
||||
port: parseInt(this.oppositeIpPort),
|
||||
}
|
||||
});
|
||||
promise.then(() => {
|
||||
if(sendCallback){
|
||||
sendCallback()
|
||||
}
|
||||
console.log(`${TAG}udpCLient udp send success:oppositeIp${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort,${this.localIpPort}`);
|
||||
}).catch(err => {
|
||||
console.log(`${TAG}udpCLient udp send fail:oppositeIp${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort,${this.localIpPort}`);
|
||||
});
|
||||
}
|
||||
console.log('getState success:' + JSON.stringify(data));
|
||||
})
|
||||
}
|
||||
sendMsgExt(param,context?) {
|
||||
console.log('sendMsgExt enter');
|
||||
if(context){
|
||||
this.context=context
|
||||
}
|
||||
this.sendId=param.id
|
||||
const msgData=this.setWholeMsg(param)
|
||||
this.sendMsg(msgData,param.sendCallback)
|
||||
}
|
||||
onError_Callback(callback?){
|
||||
this.udp.on('error',async err => {
|
||||
this.isWorking = false;
|
||||
console.log('UdpClientByCenter onError err:' + JSON.stringify(err));
|
||||
callback&&callback()
|
||||
});
|
||||
}
|
||||
onError_resend(callback?){
|
||||
this.udp.on('error',async err => {
|
||||
this.isWorking = false;
|
||||
console.log(TAG,'udpError',JSON.stringify(err))
|
||||
// await this.bindUdp()
|
||||
// await this.sendMsg('111',null)
|
||||
//await this.onMessage_1(callback)
|
||||
callback&&callback()
|
||||
});
|
||||
}
|
||||
setMsgCallBack(callback){
|
||||
this.stashFn=callback?callback:()=>{}
|
||||
}
|
||||
onMessage_2(callback,type?) {
|
||||
this.udp.on('message', (value,remoteInfo) => {
|
||||
console.log('UdpClientByCenter onMessage msg:' + JSON.stringify(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));
|
||||
this.plcUdpError = true;
|
||||
}, 2000)
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
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})
|
||||
});
|
||||
}
|
||||
|
||||
closeUdp(callback?) {
|
||||
console.log('UdpClientByCenter enter closeUdp ip:' +this.localIp+' port:'+this.localIpPort);
|
||||
this.udp.on('close', () => {
|
||||
console.log('UdpClientByCenter onClose ip:' + this.localIp + ' port:' + this.localIpPort);
|
||||
this.isWorking = false
|
||||
if (callback!=null) {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
)
|
||||
this.udp.close(err=> {
|
||||
if (err) {
|
||||
console.log('UdpClientByCenter closeUdp failed ip:'+this.localIp+' port:'+this.localIpPort+' err:' + JSON.stringify(err));
|
||||
} else {
|
||||
console.log('UdpClientByCenter closeUdp succeed ip:' +this.localIp+' port:'+this.localIpPort );
|
||||
}
|
||||
})
|
||||
// globalThis.closeHeartSocket=true
|
||||
//
|
||||
// this.udp.close(err=>{
|
||||
// if(err){
|
||||
//
|
||||
// }else{
|
||||
// this.udp.getState((err, data) => {
|
||||
// if (err) {
|
||||
// return;
|
||||
// }else{
|
||||
// globalThis.closeHeartSocket=true
|
||||
// if(!data.isisClose){
|
||||
// setTimeout(()=>{
|
||||
// callback()
|
||||
// },1000)
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// });
|
||||
|
||||
}
|
||||
onMessage_1(callback?) {
|
||||
this.udp.on('message', value => {
|
||||
console.log(TAG,'udponmessage')
|
||||
// 收到的是ArrayBuffer 需要进行转换解析
|
||||
this.plcUdpError = false
|
||||
if (value) {
|
||||
let dataView = new DataView(value.message)
|
||||
let str = ""
|
||||
for (let i = 0; i < dataView?.byteLength; ++i) {
|
||||
let c = String.fromCharCode(dataView?.getUint8(i))
|
||||
if (c !== "\n") {
|
||||
str += c
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`${TAG} udp on message array buffer:${str}`);
|
||||
let strachArr = str.split(',')
|
||||
if (strachArr[0] != '#DN_GD') {
|
||||
return
|
||||
}
|
||||
console.log(`${TAG} udp222 on message array buffer:${str}`);
|
||||
|
||||
strachArr[28]=globalThis.chuankoMsg||'0'
|
||||
// this.stashFn(str)
|
||||
const newArr=JSON.parse(JSON.stringify(strachArr))
|
||||
// this.stashFn=()=>{}
|
||||
callback&&callback(newArr.toString())
|
||||
|
||||
} else {
|
||||
callback&&callback('')
|
||||
}
|
||||
console.log('messageTimeEnd')
|
||||
this.testIfUdpConnetced(callback)
|
||||
});
|
||||
}
|
||||
testIfUdpConnetced(callback)
|
||||
{
|
||||
const arrRed = [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00];
|
||||
const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00];
|
||||
const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01];
|
||||
const arrBlueBuffer = Array2Byte(arrBlue).buffer
|
||||
const arrRedBuffer = Array2Byte(arrRed).buffer
|
||||
const arrGreenBugger = Array2Byte(arrGreen).buffer
|
||||
let num=0
|
||||
//监听udp是否断开
|
||||
clearInterval(globalThis.messageTimer)
|
||||
globalThis.messageTimer = setInterval(() => {
|
||||
const lightLineUdp = globalThis.lightLineUdp
|
||||
const isJudge = globalThis.isJudge
|
||||
setTimeout(async () => {
|
||||
//程序断开
|
||||
lightLineUdp?.send(this.plcUdpError ? arrRedBuffer : (isJudge ? arrGreenBugger : arrBlueBuffer));
|
||||
if (this.plcUdpError) {
|
||||
num++
|
||||
console.log(TAG,'plc udp信号丢失')
|
||||
if(num==3){
|
||||
await this.bindUdp()
|
||||
await this.sendMsg('111',null)
|
||||
await this.onMessage_1(callback)
|
||||
num=0
|
||||
}
|
||||
prompt.showToast({
|
||||
message: 'plc udp信号丢失',
|
||||
duration: 2000
|
||||
});
|
||||
}
|
||||
this.plcUdpError = true;
|
||||
}, 2000)
|
||||
}, 3000)
|
||||
}
|
||||
// initHeartSendMsg(param,context){
|
||||
// console.log('1111param',JSON.stringify(param))
|
||||
// this.initParam=param
|
||||
// this.context=context
|
||||
// }
|
||||
// initHeartSendMsg(param,context){
|
||||
// console.log('1111param',JSON.stringify(param))
|
||||
// this.initParam=param
|
||||
// this.context=context
|
||||
// }
|
||||
}
|
||||
|
||||
interface StashFunction {
|
||||
(params: { id: number; length: number; body: any[]; sendId: string }): void;
|
||||
(params: {
|
||||
id: number;
|
||||
length: number;
|
||||
body: any[];
|
||||
sendId: string
|
||||
}): void;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user