import socket from '@ohos.net.socket' type DealMethod = (value: ArrayBuffer) => string class UdpClient { private localIp: string = '' private localIpPort: string = '' private oppositeIp: string = '' private oppositeIpPort: string = '' private messageEvents: Array = [] private udp: socket.UDPSocket = null private disconnectEvents: Array = [] private dealMethod: DealMethod private dealMessage() { this.udp?.on("message", value => { let result = this?.dealMethod(value.message) this.messageEvents.forEach(cb => { cb(result) }) }) } init(udpLocalIp: string, udpLocalIpPort: string, udpOppositeIp: string, udpOppositeIpPort: string) { this.localIp = udpLocalIp this.oppositeIp = udpOppositeIp this.localIpPort = udpLocalIpPort this.oppositeIpPort = udpOppositeIpPort this.udp = socket.constructUDPSocketInstance(); } bindUdp(): Promise { return this.udp.bind({ address: this.localIp, port: parseInt(this.localIpPort), family: 1 }).then(() => { try { this.dealMessage() return Promise.resolve() } catch (e) { return Promise.reject(e) } }) } async reBind() { await this.close() this.udp = socket.constructUDPSocketInstance(); await this.bindUdp() } close(): Promise { return this.udp?.close() } setDealMethod(fun: DealMethod) { this.dealMethod = fun } onMessage(callback: Function) { this.messageEvents.push(callback) } onDisconnect(callback: Function) { this.disconnectEvents.push(callback) } sendMsg(data: string): Promise { return this.udp?.getState().then(() => { return this.udp.send({ data, address: { address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1 } }) }) } } export const objUDPClient = new UdpClient() export const centerUDPClient = new UdpClient() export const lightUDPClient = new UdpClient() export const judgeUDPClient = new UdpClient()