fix udpHoleServiceProxy
This commit is contained in:
parent
e78e49c45b
commit
af6b51096b
@ -68,10 +68,10 @@ actor SDLContextActor {
|
||||
// 加密算法相关
|
||||
nonisolated let rsaCipher: RSACipher
|
||||
|
||||
private var udpHoleService: SDLUDPHoleService?
|
||||
private var dnsService: SDLDNSService?
|
||||
private var packetReaderService: SDLPacketReaderService?
|
||||
private let superServiceProxy = SDLSuperServiceProxy()
|
||||
private let udpHoleServiceProxy = SDLUDPHoleServiceProxy()
|
||||
|
||||
private let publicDnsServers = ["223.5.5.5", "119.29.29.29"]
|
||||
|
||||
@ -130,7 +130,7 @@ actor SDLContextActor {
|
||||
let udpHoleService = SDLUDPHoleService(proberActor: self.proberActor) { [weak self] event in
|
||||
await self?.handleUDPHoleEvent(event)
|
||||
}
|
||||
self.udpHoleService = udpHoleService
|
||||
await self.udpHoleServiceProxy.replace(udpHoleService)
|
||||
await udpHoleService.start(includeV6: false)
|
||||
|
||||
let superService = SDLSuperService(host: self.config.serverHost) { [weak self] message in
|
||||
@ -157,9 +157,7 @@ actor SDLContextActor {
|
||||
self.packetReaderService = nil
|
||||
await packetReaderService?.stop()
|
||||
|
||||
let udpHoleService = self.udpHoleService
|
||||
self.udpHoleService = nil
|
||||
await udpHoleService?.stop()
|
||||
await self.udpHoleServiceProxy.stop()
|
||||
|
||||
let dnsService = self.dnsService
|
||||
self.dnsService = nil
|
||||
@ -219,7 +217,7 @@ extension SDLContextActor {
|
||||
}
|
||||
|
||||
private func sendPacket(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) async {
|
||||
await self.udpHoleService?.send(type: type, data: data, remoteAddress: remoteAddress)
|
||||
await self.udpHoleServiceProxy.send(type: type, data: data, remoteAddress: remoteAddress)
|
||||
}
|
||||
}
|
||||
|
||||
@ -253,7 +251,7 @@ extension SDLContextActor {
|
||||
SDLLogger.log("[SDLContext] peer message: \(peerInfo)")
|
||||
let packets = await self.puncherActor.makeRegisterPackets(peerInfo: peerInfo)
|
||||
for packet in packets {
|
||||
await self.udpHoleService?.send(type: .register, data: packet.data, remoteAddress: packet.remoteAddress)
|
||||
await self.udpHoleServiceProxy.send(type: .register, data: packet.data, remoteAddress: packet.remoteAddress)
|
||||
}
|
||||
case .event(let event):
|
||||
await self.handleEvent(event: event)
|
||||
|
||||
@ -238,3 +238,32 @@ actor SDLUDPHoleService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
actor SDLUDPHoleServiceProxy {
|
||||
private var udpHoleService: SDLUDPHoleService?
|
||||
private var generation: UInt64 = 0
|
||||
|
||||
func replace(_ udpHoleService: SDLUDPHoleService?) async {
|
||||
self.generation &+= 1
|
||||
|
||||
let oldUDPHoleService = self.udpHoleService
|
||||
self.udpHoleService = udpHoleService
|
||||
|
||||
if oldUDPHoleService !== udpHoleService {
|
||||
await oldUDPHoleService?.stop()
|
||||
}
|
||||
}
|
||||
|
||||
func stop() async {
|
||||
self.generation &+= 1
|
||||
|
||||
let udpHoleService = self.udpHoleService
|
||||
self.udpHoleService = nil
|
||||
|
||||
await udpHoleService?.stop()
|
||||
}
|
||||
|
||||
func send(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) async {
|
||||
await self.udpHoleService?.send(type: type, data: data, remoteAddress: remoteAddress)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user