fix context 结构
This commit is contained in:
parent
7fba1fec07
commit
c3752bb688
@ -196,13 +196,14 @@ actor SDLContextActor {
|
||||
|
||||
let dnsClient = self.dnsClient
|
||||
self.dnsClient = nil
|
||||
let dnsLocalClient = self.dnsLocalClient
|
||||
self.dnsLocalClient = nil
|
||||
self.dnsMonitorTask?.cancel()
|
||||
self.dnsMonitorTask = nil
|
||||
dnsClient?.stop()
|
||||
|
||||
let dnsLocalClient = self.dnsLocalClient
|
||||
self.dnsLocalClient = nil
|
||||
self.dnsLocalMonitorTask?.cancel()
|
||||
self.dnsLocalMonitorTask = nil
|
||||
dnsClient?.stop()
|
||||
await dnsLocalClient?.stop()
|
||||
|
||||
let superClient = self.superClient
|
||||
@ -277,6 +278,7 @@ extension SDLContextActor {
|
||||
|
||||
// MARK: 数据发送
|
||||
extension SDLContextActor {
|
||||
|
||||
// 发送给super/stun节点的数据
|
||||
private func sendSuperPacket(type: SDLPacketType, data: Data) async {
|
||||
await self.sendPacket(type: type, data: data, remoteAddress: self.config.stunSocketAddress)
|
||||
@ -323,7 +325,6 @@ extension SDLContextActor {
|
||||
private func startSuperClient() async throws {
|
||||
let superClient = SDLSuperClient(host: self.config.serverHost, port: 1443)
|
||||
self.superClient = superClient
|
||||
|
||||
await superClient.start()
|
||||
|
||||
do {
|
||||
@ -331,14 +332,11 @@ extension SDLContextActor {
|
||||
try await runSuperClient(superClient)
|
||||
} onCancel: {
|
||||
SDLLogger.log("[SDLContext] startSuperClient onCancel", for: .debug)
|
||||
|
||||
Task {
|
||||
await superClient.stop()
|
||||
}
|
||||
}
|
||||
|
||||
await cleanupSuperClient(superClient)
|
||||
|
||||
} catch {
|
||||
await cleanupSuperClient(superClient)
|
||||
SDLLogger.log("[SDLContext] startSuperClient catch err: \(error)")
|
||||
@ -688,8 +686,6 @@ extension SDLContextActor {
|
||||
await self?.setNatType(natType: natType)
|
||||
}
|
||||
|
||||
SDLLogger.log("[SDLContext] udpHole ready")
|
||||
|
||||
do {
|
||||
try await withTaskCancellationHandler {
|
||||
for try await (remoteAddress, message) in await udpHole.messageStream() {
|
||||
@ -878,6 +874,7 @@ extension SDLContextActor {
|
||||
|
||||
// MARK: 和Stun相关的心跳机制
|
||||
extension SDLContextActor {
|
||||
|
||||
// MARK: -- StunRequestTask
|
||||
private func startStunRequestTask(welcome: SDLWelcome) async {
|
||||
self.stunRequestTask?.cancel()
|
||||
@ -890,7 +887,7 @@ extension SDLContextActor {
|
||||
|
||||
// 通过 welcome信息拿到当前可用使用的ipv6地址
|
||||
// 处理心跳逻辑
|
||||
self.stunRequestTask = Task.detached { [weak self] in
|
||||
self.stunRequestTask = Task { [weak self] in
|
||||
let timerStream = SDLAsyncTimerStream()
|
||||
timerStream.start(interval: .seconds(8))
|
||||
|
||||
@ -935,7 +932,7 @@ extension SDLContextActor {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: 处理从Tun相关的逻辑
|
||||
// MARK: NEPacketTunnelProvider相关的逻辑
|
||||
extension SDLContextActor {
|
||||
|
||||
// 开始读取数据, 用单独的线程处理packetFlow
|
||||
@ -945,22 +942,20 @@ extension SDLContextActor {
|
||||
|
||||
// 开启新的任务
|
||||
let provider = self.provider
|
||||
self.readTask = Task.detached(priority: .high) { [weak self] in
|
||||
self.readTask = Task(priority: .high) {
|
||||
repeat {
|
||||
if Task.isCancelled {
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
try Task.checkCancellation()
|
||||
let (packets, numbers) = await provider.packetFlow.readPackets()
|
||||
if Task.isCancelled {
|
||||
return
|
||||
}
|
||||
|
||||
try Task.checkCancellation()
|
||||
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)
|
||||
}
|
||||
}
|
||||
} catch let err {
|
||||
SDLLogger.log("[SDLContext] readTask catch error: \(err)")
|
||||
}
|
||||
} while true
|
||||
}
|
||||
}
|
||||
@ -1061,10 +1056,10 @@ extension SDLContextActor {
|
||||
let nePacket = NEPacket(data: ipPacketData, protocolFamily: 2)
|
||||
self.provider.packetFlow.writePacketObjects([nePacket])
|
||||
case .cloudDNS(let name, let ipPacketData):
|
||||
//SDLLogger.log("[SDLContext] get cloud dns request: \(name)")
|
||||
await self.dnsClient?.forward(ipPacketData: ipPacketData)
|
||||
SDLLogger.log("[SDLContext] get cloud dns request: \(name)")
|
||||
self.dnsClient?.forward(ipPacketData: ipPacketData)
|
||||
case .localDNS(let name, let payload, let tracker):
|
||||
//SDLLogger.log("[SDLContext] get local dns request: \(name)")
|
||||
SDLLogger.log("[SDLContext] get local dns request: \(name)")
|
||||
await self.dnsLocalClient?.query(tracker: tracker, dnsPayload: payload)
|
||||
case .forwardToNextHop(let ip, let type, let data, let kind):
|
||||
await self.forwardPacketToNextHop(ip: ip, type: type, data: data, kind: kind)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user