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