fix context 结构

This commit is contained in:
anlicheng 2026-05-06 21:55:56 +08:00
parent 7fba1fec07
commit c3752bb688
5 changed files with 22 additions and 27 deletions

View File

@ -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)