fix udpHoleServiceProxy
This commit is contained in:
parent
e78e49c45b
commit
af6b51096b
@ -68,10 +68,10 @@ actor SDLContextActor {
|
|||||||
// 加密算法相关
|
// 加密算法相关
|
||||||
nonisolated let rsaCipher: RSACipher
|
nonisolated let rsaCipher: RSACipher
|
||||||
|
|
||||||
private var udpHoleService: SDLUDPHoleService?
|
|
||||||
private var dnsService: SDLDNSService?
|
private var dnsService: SDLDNSService?
|
||||||
private var packetReaderService: SDLPacketReaderService?
|
private var packetReaderService: SDLPacketReaderService?
|
||||||
private let superServiceProxy = SDLSuperServiceProxy()
|
private let superServiceProxy = SDLSuperServiceProxy()
|
||||||
|
private let udpHoleServiceProxy = SDLUDPHoleServiceProxy()
|
||||||
|
|
||||||
private let publicDnsServers = ["223.5.5.5", "119.29.29.29"]
|
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
|
let udpHoleService = SDLUDPHoleService(proberActor: self.proberActor) { [weak self] event in
|
||||||
await self?.handleUDPHoleEvent(event)
|
await self?.handleUDPHoleEvent(event)
|
||||||
}
|
}
|
||||||
self.udpHoleService = udpHoleService
|
await self.udpHoleServiceProxy.replace(udpHoleService)
|
||||||
await udpHoleService.start(includeV6: false)
|
await udpHoleService.start(includeV6: false)
|
||||||
|
|
||||||
let superService = SDLSuperService(host: self.config.serverHost) { [weak self] message in
|
let superService = SDLSuperService(host: self.config.serverHost) { [weak self] message in
|
||||||
@ -157,9 +157,7 @@ actor SDLContextActor {
|
|||||||
self.packetReaderService = nil
|
self.packetReaderService = nil
|
||||||
await packetReaderService?.stop()
|
await packetReaderService?.stop()
|
||||||
|
|
||||||
let udpHoleService = self.udpHoleService
|
await self.udpHoleServiceProxy.stop()
|
||||||
self.udpHoleService = nil
|
|
||||||
await udpHoleService?.stop()
|
|
||||||
|
|
||||||
let dnsService = self.dnsService
|
let dnsService = self.dnsService
|
||||||
self.dnsService = nil
|
self.dnsService = nil
|
||||||
@ -219,7 +217,7 @@ extension SDLContextActor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func sendPacket(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) async {
|
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)")
|
SDLLogger.log("[SDLContext] peer message: \(peerInfo)")
|
||||||
let packets = await self.puncherActor.makeRegisterPackets(peerInfo: peerInfo)
|
let packets = await self.puncherActor.makeRegisterPackets(peerInfo: peerInfo)
|
||||||
for packet in packets {
|
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):
|
case .event(let event):
|
||||||
await self.handleEvent(event: 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