2025-02-17 10:22:12 +08:00
|
|
|
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<Function> = []
|
|
|
|
|
private udp: socket.UDPSocket = null
|
|
|
|
|
private disconnectEvents: Array<Function> = []
|
|
|
|
|
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<void> {
|
|
|
|
|
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<void> {
|
|
|
|
|
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<void> {
|
|
|
|
|
return this.udp?.getState().then(() => {
|
|
|
|
|
return this.udp.send({
|
|
|
|
|
data,
|
|
|
|
|
address: { address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1 }
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-17 10:30:31 +08:00
|
|
|
export const objUDPClient = new UdpClient()
|
|
|
|
|
|
|
|
|
|
export const centerUDPClient = new UdpClient()
|
|
|
|
|
|
|
|
|
|
export const lightUDPClient = new UdpClient()
|
|
|
|
|
|
|
|
|
|
export const judgeUDPClient = new UdpClient()
|