Compare commits

...

4 Commits

Author SHA1 Message Date
291e75c150 优化 2025-07-21 09:55:35 +08:00
50b63e471d Merge branch 'dev' into dev_remote 2025-07-21 09:53:15 +08:00
lv
f9beb54a28 冲突提交 2025-06-25 10:21:28 +08:00
lv
f420a9512f 重连 2025-06-25 10:19:26 +08:00
5 changed files with 146 additions and 60 deletions

View File

@ -3,7 +3,7 @@ import { getSyncData } from '../service/initable';
import hilog from '@ohos.hilog';
import FileUtil from '../../common/utils/File'
import { GlobalConfig } from '../../config/index'
const TAG = 'socketTag[TcpDemo.TcpClient]'
export async function getTCP(flag=false) {
globalThis.getCloseTcp=true
const fileUtil = new FileUtil(globalThis.context)
@ -35,10 +35,16 @@ export async function getTCP(flag=false) {
console.log('ttttttt00')
clearInterval(globalThis.intervalSendmsg)
globalThis.intervalSendmsg=setInterval(()=>{
globalThis.intervalSendmsg=setInterval(async()=>{
console.log('getCloseTcp',globalThis.carInfo.carNo)
if(!globalThis.getCloseTcp){
globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
globalThis.tcpStep+=1
if(globalThis.tcpStep>30){
console.log(TAG,'tcp重连开始')
globalThis.tcpStep=0
getTCP()
}
}
},1000/3)
globalThis.TcpClient.onError((val) => {
@ -68,10 +74,16 @@ export async function getTCP(flag=false) {
console.log('ttttttt12')
clearInterval(globalThis.intervalSendmsg)
globalThis.intervalSendmsg=setInterval(()=>{
globalThis.intervalSendmsg=setInterval(async()=>{
// console.log('getCloseTcp',globalThis.getCloseTcp)
if(!globalThis.getCloseTcp){
globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
globalThis.tcpStep+=1
if(globalThis.tcpStep>30){
console.log(TAG,'tcp重连开始')
globalThis.tcpStep=0
getTCP()
}
}
},1000/3)
globalThis.TcpClient.onError((val) => {

View File

@ -9,7 +9,6 @@ import appRecovery from '@ohos.app.ability.appRecovery';
import power from '@ohos.power';
import preferences from '@ohos.data.preferences';
export const gpsConfig = [
{ label: "差分状态", prop: "cfzt" },
{ label: "经纬度收星数", prop: "sxs" },
@ -71,6 +70,18 @@ enum EventCode {
Reply
}
enum ButtonEventType {
Single,
Double,
LongPress
}
interface ToolEvent<T = any> {
code: EventCode,
data: T
id?: string
}
interface FileInfo {
fileName: string
lastUpdateTime: string
@ -85,6 +96,13 @@ interface PlatformEvent<T = any> {
data: T
}
interface ButtonParams {
type: ButtonEventType
button: number
page: number
}
export type CommandCallback = (button: number, reply: (result: number) => void) => void
const Tag = "[websocket]"
const SystemLogDir = "/data/log/hilog"
@ -208,6 +226,10 @@ export class RemoteToolWebsocket {
page: number,
cb: () => void
}> = []
private onButtonCallback: Array<{
page: number,
cb: CommandCallback
}> = []
public isStart: boolean = false
private isRegister: boolean = false
private context: common.UIAbilityContext
@ -374,6 +396,34 @@ export class RemoteToolWebsocket {
this.sendReply(this.serialNumber, data.eventType)
break
case PlatFormEventType.ToolCommand:
let command = JSON.parse(data.data) as ToolEvent
switch (command.code) {
case EventCode.Data:
break
case EventCode.Button:
let button = JSON.parse(command.data) as ButtonParams
this.onButtonCallback.forEach(item => {
const reply = (result: number) => {
this.sendReply(this.serialNumber, PlatFormEventType.SyncData, JSON.stringify({
code: EventCode.Reply,
data: JSON.stringify(result),
id: command.id
} as ToolEvent))
}
if (item.page === button.page) {
item.cb(button.button, reply)
}
})
break
case EventCode.Router:
break
case EventCode.Function:
break
case EventCode.Reply:
break
default:
return
}
break
default:
console.warn("Unknown event type:", data.eventType);
@ -640,6 +690,17 @@ export class RemoteToolWebsocket {
}
offStart(page: number) {
this.onStartCallback = this.onStartCallback.filter(item => item.page != page)
this.onStartCallback = this.onStartCallback.filter(item => item.page !== page)
}
onButton(cb: CommandCallback, page: number) {
this.onButtonCallback.push({
page,
cb
})
}
offButton(page: number) {
this.onButtonCallback = this.onButtonCallback.filter(item => item.page !== page)
}
}

View File

@ -148,13 +148,12 @@ export default class TcpClient {
this.tcpSendNum=0
return
}
globalThis.getCloseTcp=true
console.log(`${TAG} TCPsend error ${JSON.stringify(err)}`)
// this.writeLog({
// time:dateFormat(new Date()),
// message: `${TAG} TCPsend error ${JSON.stringify(err)}`,
// })
reslove(false)
reject(false)
});
})
}
@ -165,6 +164,7 @@ export default class TcpClient {
// time:dateFormat(new Date()),
// PLC:`${TAG} Tcponmessage`,
// })
globalThis.tcpStep=0
globalThis.tcpUdpError = false
if (value) {
callback && callback(value.message)

View File

@ -38,6 +38,7 @@ export default class EntryAbility extends UIAbility {
async onWindowStageCreate(windowStage: window.WindowStage) {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
globalThis.tcpStep=0
globalThis.carInfo = {}
globalThis.examinerInfo = {}
@ -63,11 +64,15 @@ export default class EntryAbility extends UIAbility {
globalThis.pathDir = this.context.filesDir;
globalThis.context = this.context;
globalThis.isJudgeInitBool = false
console.info('jiangsong globalThis.pathDir = ' + globalThis.pathDir);
// this.requestPermission(this.context)
// this.featureAbilityAuth()
const windowClass = await windowStage.getMainWindow();
globalThis.windowClass = windowClass
await windowClass.setWindowLayoutFullScreen(true)
await windowClass.setWindowSystemBarEnable([])
// await windowClass.setWindowLayoutFullScreen(true)
// await windowClass.setWindowSystemBarEnable([]) //全屏
await windowClass.setWindowSystemBarEnable(['navigation'])
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {

View File

@ -19,7 +19,7 @@ import { delPic } from '../common/service/videoService';
import imageBtn from './compontents/imageBtn';
import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
import { updateModelAndCar } from '../common/autoUpdate/index'
import { RemoteToolWebsocket } from '../common/utils/RemotetoolWebsocket';
import { CommandCallback, RemoteToolWebsocket } from '../common/utils/RemotetoolWebsocket';
import { UsbUtils } from '../common/utils/UsbUtils';
@ -30,7 +30,7 @@ struct Index {
@State version: string = ''
@State url: string = ''
@State hasAuth: boolean = false;
@State dialogVisiable: boolean = false;
@State dialogVisible: boolean = false;
@State isSingle: boolean = false;
@State deviceId: string = '';
@State angle: number = 0
@ -63,6 +63,15 @@ struct Index {
private context = getContext(this) as common.UIAbilityContext;
private remoteToolWebsocket: RemoteToolWebsocket = new RemoteToolWebsocket()
private usbUtils: UsbUtils = new UsbUtils(this.context)
private onButtonCallback: CommandCallback = (button, reply) => {
switch (button) {
case 1:
this.onNetWork(reply)
break
default:
return
}
}
@Styles
commStyle(){
@ -91,7 +100,7 @@ struct Index {
Image($r('app.media.btn_back')).width('14.4%').height('12.2%')
.onClick(() => {
this.dialogVisiable = true
this.dialogVisible = true
})
}
}
@ -104,40 +113,8 @@ struct Index {
if (!this.isSingle) {
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_lw') })
.margin({ left: 80 * globalThis.ratio })
.onClick(async () => {
if (this.loading) {
return
}
setTimeout(() => {
this.angle = 360
}, 1000)
this.angle = 0
if (!globalThis.timeInfo) {
globalThis.type = '1'
globalThis.title = '时间同步接口连接失败'
this.errorDialog.open()
promptAction.showToast({
message: `时间同步接口连接失败`,
duration: 3000
});
this.loading = false
return
}
if (!globalThis.carInfo) {
promptAction.showToast({
message: `车辆信息接口获取失败`,
duration: 3000
});
globalThis.type = '1'
globalThis.title = '车辆信息接口获取失败'
this.errorDialog.open()
this.loading = false
return
}
this.testXMLToJSONInWorker()
.onClick(() => {
this.onNetWork()
})
}
if (this.isSingle) {
@ -247,8 +224,7 @@ struct Index {
.margin({ bottom: 10 })
}
//
if (this.dialogVisiable) {
if (this.dialogVisible) {
Flex({ justifyContent: FlexAlign.Center }) {
Text('确认是否退出应用')
.fontSize(28 * this.ratio * this.dialogRatio)
@ -262,7 +238,7 @@ struct Index {
}
.commStyle()
.onClick(() => {
this.dialogVisiable = false
this.dialogVisible = false
}).margin({ right: 10 * this.ratio })
@ -312,7 +288,6 @@ struct Index {
.backgroundColor('#E6E3DF')
.borderRadius(19 * globalThis.ratio)
}
if (this.loading) {
Column() {
Image($r('app.media.open_loading'))
@ -353,13 +328,11 @@ struct Index {
}
async aboutToAppear() {
console.log('diyidiy')
this.remoteToolWebsocket.onButton(this.onButtonCallback, 1)
this.avPlayer = new VoiceAnnounce();
this.initParamFlag = false
this.delLoading = false
this.dialogVisiable = false
this.dialogVisible = false
this.angle = 0
this.loading = false
globalThis.lsh = '1111111111111'
@ -386,15 +359,46 @@ struct Index {
}
aboutToDisappear() {
// this.vocObj && this.vocObj.releasePlayer()
this.remoteToolWebsocket.offButton(1)
}
async testXMLToJSONInWorker() {
onNetWork(cb?: Function) {
if (this.loading) {
return
}
setTimeout(() => {
this.angle = 360
}, 1000)
this.angle = 0
if (!globalThis.timeInfo) {
globalThis.type = '1'
globalThis.title = '时间同步接口连接失败'
this.errorDialog.open()
promptAction.showToast({
message: `时间同步接口连接失败`,
duration: 3000
});
this.loading = false
return
}
if (!globalThis.carInfo) {
promptAction.showToast({
message: `车辆信息接口获取失败`,
duration: 3000
});
globalThis.type = '1'
globalThis.title = '车辆信息接口获取失败'
this.errorDialog.open()
this.loading = false
return
}
this.testXMLToJSONInWorker(cb)
}
async testXMLToJSONInWorker(cb?: Function) {
if (this.loading) {
return
}
const param = {
carId: globalThis.carInfo?.carId,
examinationRoomId: globalThis.carInfo?.examinationRoomId,
@ -448,12 +452,14 @@ struct Index {
}
if (sys.v_no === '824' && decodeURIComponent(sys.v_value) == '0') {
// this.Param612Str= decodeURIComponent(sys.v_value)
cb(1)
router.pushUrl({
url: 'pages/CarCheck',
params: {
'fromIndex': true
}
}, router.RouterMode.Single)
} else {
router.pushUrl({
url: 'pages/ExaminerLogin',
@ -463,6 +469,8 @@ struct Index {
});
}
}).catch(() => {
cb(0)
})
}
@ -482,7 +490,7 @@ struct Index {
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId
}
// globalThis.udpClient2.initHeartSendMsg(param,this.context)
if (globalThis.udpClient2.getStatus()) {
globalThis.udpClient2.sendMsgExt(param, this.context)
}