refactor: 重构网络配置相关接口,优化文件处理逻辑

This commit is contained in:
wangzhongjie 2025-03-26 14:15:40 +08:00
parent af338af32a
commit 94cf59b607
7 changed files with 38 additions and 270 deletions

View File

@ -1,196 +0,0 @@
import socket from '@ohos.net.socket';
import util from '@ohos.util';
interface RequestKey {
time: string
}
interface RequestCallback {
url: string
type: number
resolve: Function
reject: Function
timeout: number
}
interface RequestParams {
method: string
data: object
type: 0 | 1
contentType: string
timeout: number
}
interface Response {
serialNumber: string
data: string
isForwordHttp: string
}
let tag = "tcp request"
class TcpUtils {
private static instance: TcpUtils
private socket: socket.TCPSocket = socket.constructTCPSocketInstance()
private requestMap: Map<string, RequestCallback> = new Map<string, RequestCallback>()
private tick: number
private heartbeat: number
private cache: string = ''
private fileUtil = new FileUtil(AppStorage.get('context'))
private path = ""
constructor() {
if (!TcpUtils.instance) {
TcpUtils.instance = this
}
return TcpUtils.instance
}
async init() {
this.path = await this.fileUtil.initFolder('/config/tcpRequest')
this.socket.on("message", (res) => {
let decoder = util.TextDecoder.create()
let message = decoder.decodeWithStream(new Uint8Array(res.message))
console.log(tag, "on message", message)
this.cache += message
let start = this.cache.indexOf("^#")
let end = this.cache.indexOf("#$")
try {
if (start !== -1 && end !== -1) {
let message = this.cache.slice(start + 2, end)
this.cache = this.cache.slice(end + 2)
let tempIndex = message.indexOf("^#")
while (tempIndex > -1) {
message = message.slice(tempIndex + 2)
tempIndex = message.indexOf("^#")
}
let result: Response = JSON.parse(message)
let key = result.serialNumber
let data = result.data
let isSuccess = result.isForwordHttp === "1"
console.log(tag, "complete message")
let item = this.requestMap.get(key)
console.log(tag, "============", item?.url)
if (this.requestMap.get(key)?.type === 0) {
console.log(tag, "resolve message")
if (isSuccess) {
item?.resolve(JSON.parse(data))
} else {
item?.reject({
code: -1,
message: data || "request failed"
})
}
} else {
console.log(tag, "resolve message")
if (isSuccess) {
item?.resolve(data)
} else {
item?.reject({
code: -1,
message: data || "request failed"
})
}
}
this.requestMap.delete(key)
}
} catch (e) {
console.log(tag, "解析相应失败", JSON.stringify(e))
}
})
this.loop()
return this.socket.connect({
address: { address: "172.37.55.191", port: 19998 }
}).then(() => {
this.heartbeat = setInterval(() => {
this.send("heart", JSON.stringify({
isHeartBeat: 1
}), false)
}, 1000 * 6)
console.log(tag, "connect success")
}).catch(err => {
console.log(tag, JSON.stringify(err))
})
}
request(url: string, option: RequestParams, resolve, reject) {
let key = new Date().getTime()
this.requestMap.set(key + "", {
url,
resolve,
reject,
timeout: option.timeout,
type: option.type,
})
let message = {
url,
serialNumber: key,
type: option.type,
method: option.method,
data: option.data,
contentType: option.contentType,
isHeartBeat: "0",
}
this.send(key + "", JSON.stringify(message))
}
destroy() {
clearInterval(this.tick)
clearInterval(this.heartbeat)
}
private loop() {
this.tick = setInterval(() => {
let now = new Date().getTime()
this.requestMap.forEach((value, key) => {
if (now - Number(key) >= value.timeout) {
console.log("tcp request timeout url: ", value.url)
console.log("tcp request timeout key: ", key)
value.reject({
message: "tcp request timeout",
code: 2300028
})
this.requestMap.delete(key)
}
})
}, 100)
}
private async send(key: string, message: string, log: boolean = true) {
if (log) {
console.log(tag, 'send', message)
}
this.fileUtil.addFile(this.path + 'temp.txt', `^#${message}#$`)
this.socket.send({
data: `^#${message}#$`
}).then(() => {
if (log) {
console.log(tag, 'send success')
}
}).catch(async err => {
if (key !== "heart") {
console.log("tcp request send failed", this.requestMap.get(key).url)
this.requestMap.get(key).reject({
message: "tcp request send failed",
code: 2300007
})
}
await this.socket.close()
this.socket = socket.constructTCPSocketInstance()
await this.socket.connect({
address: { address: "172.37.55.191", port: 19998 }
}).then(res => {
console.log("tcp request reconnect success", JSON.stringify(res))
}).catch(err => {
console.log("tcp request reconnect failed", JSON.stringify(err))
})
console.log(tag, JSON.stringify(err))
})
}
}
export const tcpUtil = new TcpUtils()

View File

@ -1,37 +0,0 @@
/*
* Copyright (c) 2023 Hunan OpenValley Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const TEN = 10; // 这是数字10
const SIXTY = 60; // 时间进制
const THOUSAND = 1000; // 这是数字1000
export function tempNum(num: number): string {
if (num < TEN) {
return '0' + num;
}
return num.toString();
}
export function getDurationString(duration: number): string {
let hour = Math.floor(duration / (THOUSAND * SIXTY * SIXTY));
let minute = Math.floor((duration - hour * (THOUSAND * SIXTY * SIXTY)) / (THOUSAND * SIXTY));
let second = Math.floor(
(duration - hour * (THOUSAND * SIXTY * SIXTY) - minute * (SIXTY * THOUSAND)) / THOUSAND
);
if (hour > 0) {
return `${tempNum(hour)}:${tempNum(minute)}:${tempNum(second)}`;
}
return `${tempNum(minute)}:${tempNum(second)}`;
}

View File

@ -1,16 +1,14 @@
import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';
import relationalStore from '@ohos.data.relationalStore'
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import { GlobalConfig } from '../config/global'
import { tcpUtil } from '../common/utils/TcpRequest';
import { GlobalConfig } from '../config/global';
import { initTable } from '../common/service/initable';
import { centerUDPClient, lightUDPClient, objUDPClient } from '../utils/UdpUtils';
import Want from '@ohos.app.ability.Want';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import { BaseInfoType, CarInfoType, ExaminerInfoType } from '../model';
import DB from '../utils/DbSql';
import { tcpUtil } from '../utils/TcpRequest';
export default class EntryAbility extends UIAbility {
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {

View File

@ -114,4 +114,22 @@ export interface CarInfoType {
}
// TODO
export interface ExaminerInfoType {}
export interface ExaminerInfoType {}
// 一些运行配置
export interface EnvironmentConfigurationType {
udplocalIp?: string,
udplocalIpPort?: string,
udpOppositeIp?: string,
udpOppositeIpPort?: string,
tcplocalIp?: string,
tcplocalIpPort?: string,
tcpOppositeIp?: string,
tcpOppositePort?: string,
netMask?: string,
gateway?: string,
dnsServers?: string,
centerIp?: string,
centerPort?: string,
terType?: string
}

View File

@ -1,15 +0,0 @@
export interface NetworkConfigType {
udplocalIp: string;
udplocalIpPort: string;
udpOppositeIp: string;
udpOppositeIpPort: string;
tcplocalIp: string;
tcplocalIpPort: string;
tcpOppositeIp: string;
tcpOppositePort: string;
netMask: string;
gateway: string;
dnsServers: string;
centerIp: string;
centerPort: string;
}

View File

@ -3,9 +3,9 @@ import ethernet from '@ohos.net.ethernet';
import common from '@ohos.app.ability.common';
import { GlobalConfig } from '../config';
import { NetworkConfigType } from '../model/TerminalInfos';
import Prompt from '@system.prompt';
import FileUtils from '../utils/FileUtils';
import { EnvironmentConfigurationType } from '../model/Common';
@Entry
@ -17,20 +17,20 @@ struct Index {
// @State textList2: string[] = []
@State ratio: number = 1700 / 960
@State inputFontSize: number = 12 //12
//
// @State inputTextList1: string[] = ['192.168.7.170','8084','192.168.7.170','20122','255.255.255.0','192.168.7.1','','','114.114.114.114','112.80.35.83','11055' +
// '',]
// @State inputTextList2: string[] = ['192.168.7.124','20022']
// @State inputTextList1: string[] = ['172.37.55.191','18782','192.168.7.1','8082','255.255.255.0','192.168.7.170','114.114.114.114','192.168.7.124','20022','172.37.55.59','20122']
@State inputTextList1: string[] =
['172.37.55.191', '18782', '172.37.55.191', '8082', '255.255.255.0', '192.168.7.1', '114.114.114.114',
'192.168.7.124', '20022', '192.168.7.170', '20122']
// @State inputTextList2: string[] = []
// 112.80.35.83 11052
//
// @State inputTextList1: string[] = ['192.168.7.170','8084','192.168.7.170','20122','255.255.255.0','192.168.7.1','','','114.114.114.114','112.80.35.83','11055' +
// '',]
// @State inputTextList2: string[] = ['192.168.7.124','20022']
// @State inputTextList1: string[] = ['192.168.36.2','8084','192.168.36.200','20122','255.255.255.0','192.168.36.1','','','114.114.114.114','192.168.36.139','8000']
@State @Watch('outClick') outFlag: boolean = false;
// @State inputTextList2: string[] = []
// 112.80.35.83 11052
scroller: Scroller = new Scroller()
private fileUtil: FileUtils
// @State inputTextList2: string[] = ['192.168.36.139','20022']
private context = getContext(this) as common.UIAbilityContext;
@ -85,9 +85,8 @@ struct Index {
Column() {
Image($r('app.media.terminal_save')).width('20.5%').height('74%').onClick(async () => {
const fileUtil = new FileUtils(this.context)
const folderPath = await fileUtil.initFolder(`/config`);
const param: NetworkConfigType = {
const folderPath = await this.fileUtil.initFolder(`/config`);
const param: EnvironmentConfigurationType = {
udplocalIp: this.inputTextList1[9],
udplocalIpPort: this.inputTextList1[10],
udpOppositeIp: this.inputTextList1[7],
@ -102,7 +101,8 @@ struct Index {
centerIp: this.inputTextList1[2],
centerPort: this.inputTextList1[3]
}
fileUtil.addFile(`${folderPath}/ipConfig.txt`, JSON.stringify(param), '')
this.fileUtil.addFile(`${folderPath}/ipConfig.txt`, JSON.stringify(param))
AppStorage.setOrCreate<EnvironmentConfigurationType>("EnvironmentConfiguration", param)
// upDateTableByArray('IpConfigTable',[])
ethernet.setIfaceConfig("eth0", {
mode: 0,
@ -149,12 +149,12 @@ struct Index {
}
async aboutToAppear() {
const fileUtil = new FileUtils(this.context)
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
this.fileUtil = new FileUtils(this.context)
const data = await this.fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
if (data === '' || data === undefined) {
} else {
// TODO
const result: ESObject = JSON.parse(data)
const result: EnvironmentConfigurationType = JSON.parse(data)
AppStorage.setOrCreate<EnvironmentConfigurationType>("EnvironmentConfiguration", result)
this.inputTextList1[9] = result.udplocalIp
this.inputTextList1[10] = result.udplocalIpPort
this.inputTextList1[7] = result.udpOppositeIp

View File

@ -625,7 +625,7 @@ struct Index {
this.oldParam = JSON.parse(JSON.stringify(this.param))
this.videoArr = JSON.parse(JSON.stringify(this.videoArr))
const folderPath = await this.fileUtil.initFolder(`/config`);
this.fileUtil.addFile(`${folderPath}/config3.txt`, JSON.stringify(this.param), 'overWrite')
this.fileUtil.addFile(`${folderPath}/config3.txt`, JSON.stringify(this.param))
this.showFlag = false
}
}