调整变量的ARC
This commit is contained in:
parent
b858be7310
commit
a56f858910
@ -57,6 +57,7 @@ actor SDLContextActor {
|
||||
// 依赖的变量
|
||||
private var udpHole: SDLUDPHole?
|
||||
private var udpHoleMonitorTask: Task<Void, Never>?
|
||||
private var natProbeTask: Task<Void, Never>?
|
||||
private var udpHoleLocalAddress: SocketAddress?
|
||||
|
||||
private var udpHoleV6: SDLUDPHoleV6?
|
||||
@ -381,9 +382,15 @@ actor SDLContextActor {
|
||||
}
|
||||
|
||||
// 开始探测nat的类型
|
||||
Task {
|
||||
self.natProbeTask?.cancel()
|
||||
let proberActor = self.proberActor
|
||||
self.natProbeTask = Task { [weak self] in
|
||||
SDLLogger.log("[SDLContext] start probeNatType")
|
||||
await self.probeNatType()
|
||||
let natType = await proberActor.probeNatType(using: udpHole)
|
||||
if Task.isCancelled {
|
||||
return
|
||||
}
|
||||
await self?.setNatType(natType: natType)
|
||||
}
|
||||
|
||||
SDLLogger.log("[SDLContext] udpHole ready")
|
||||
@ -499,11 +506,21 @@ actor SDLContextActor {
|
||||
|
||||
self.udpHoleMonitorTask?.cancel()
|
||||
self.udpHoleMonitorTask = nil
|
||||
self.natProbeTask?.cancel()
|
||||
self.natProbeTask = nil
|
||||
udpHoleV6?.stop()
|
||||
await udpHole?.stop()
|
||||
|
||||
let dnsClient = self.dnsClient
|
||||
self.dnsClient = nil
|
||||
let dnsLocalClient = self.dnsLocalClient
|
||||
self.dnsLocalClient = nil
|
||||
self.dnsMonitorTask?.cancel()
|
||||
self.dnsMonitorTask = nil
|
||||
self.dnsLocalMonitorTask?.cancel()
|
||||
self.dnsLocalMonitorTask = nil
|
||||
dnsClient?.stop()
|
||||
await dnsLocalClient?.stop()
|
||||
|
||||
let quicClient = self.quicClient
|
||||
self.quicClient = nil
|
||||
@ -564,10 +581,11 @@ actor SDLContextActor {
|
||||
await self.ipv6AssistClient?.stop()
|
||||
self.ipv6AssistClient = SDLIPV6AssistClient(assistServerInfo: welcome.ipv6Assist)
|
||||
await self.ipv6AssistClient?.start()
|
||||
let ipv6AssistClient = self.ipv6AssistClient
|
||||
|
||||
// 通过 welcome信息拿到当前可用使用的ipv6地址
|
||||
// 处理心跳逻辑
|
||||
self.stunRequestTask = Task.detached {
|
||||
self.stunRequestTask = Task.detached { [weak self] in
|
||||
let timerStream = SDLAsyncTimerStream()
|
||||
timerStream.start(interval: .seconds(8))
|
||||
|
||||
@ -576,13 +594,13 @@ actor SDLContextActor {
|
||||
break
|
||||
}
|
||||
|
||||
let probeReply = try? await self.ipv6AssistClient?.probe(requestTimeout: .seconds(3))
|
||||
let probeReply = try? await ipv6AssistClient?.probe(requestTimeout: .seconds(3))
|
||||
if let v6Info = probeReply?.v6Info, let v6Address = SDLUtil.ipv6DataToString(v6Info.v6) {
|
||||
SDLLogger.log("[SDLContext] probe ipv6 address: \(v6Address)")
|
||||
} else {
|
||||
SDLLogger.log("[SDLContext] probe ipv6 address: empty")
|
||||
}
|
||||
await self.sendStunRequest(probeReply: probeReply)
|
||||
await self?.sendStunRequest(probeReply: probeReply)
|
||||
}
|
||||
|
||||
SDLLogger.log("[SDLContext] udp stunRequestTask cancel")
|
||||
@ -617,16 +635,21 @@ actor SDLContextActor {
|
||||
self.readTask?.cancel()
|
||||
|
||||
// 开启新的任务
|
||||
self.readTask = Task.detached(priority: .high) {
|
||||
let provider = self.provider
|
||||
self.readTask = Task.detached(priority: .high) { [weak self] in
|
||||
repeat {
|
||||
if Task.isCancelled {
|
||||
return
|
||||
}
|
||||
|
||||
let (packets, numbers) = await self.provider.packetFlow.readPackets()
|
||||
let (packets, numbers) = await provider.packetFlow.readPackets()
|
||||
if Task.isCancelled {
|
||||
return
|
||||
}
|
||||
|
||||
for (data, number) in zip(packets, numbers) where number == 2 {
|
||||
if let ipPacket = IPPacket(data) {
|
||||
await self.dealTunPacket(packet: ipPacket)
|
||||
await self?.dealTunPacket(packet: ipPacket)
|
||||
}
|
||||
}
|
||||
} while true
|
||||
@ -741,6 +764,7 @@ actor SDLContextActor {
|
||||
self.udpHoleLocalAddress = nil
|
||||
self.udpHoleV6 = nil
|
||||
self.dnsClient = nil
|
||||
SDLLogger.log("[SDLContext] deinit", for: .debug)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,13 +19,14 @@ class SDLAsyncTimerStream {
|
||||
|
||||
func start(interval: DispatchTimeInterval) {
|
||||
timer.schedule(deadline: .now(), repeating: interval)
|
||||
timer.setEventHandler {
|
||||
self.cont.yield()
|
||||
timer.setEventHandler { [weak self] in
|
||||
self?.cont.yield()
|
||||
}
|
||||
timer.resume()
|
||||
}
|
||||
|
||||
deinit {
|
||||
self.cont.finish()
|
||||
self.timer.cancel()
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user