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 let dnsClient = self.dnsClient
self.dnsClient = nil self.dnsClient = nil
let dnsLocalClient = self.dnsLocalClient
self.dnsLocalClient = nil
self.dnsMonitorTask?.cancel() self.dnsMonitorTask?.cancel()
self.dnsMonitorTask = nil self.dnsMonitorTask = nil
dnsClient?.stop()
let dnsLocalClient = self.dnsLocalClient
self.dnsLocalClient = nil
self.dnsLocalMonitorTask?.cancel() self.dnsLocalMonitorTask?.cancel()
self.dnsLocalMonitorTask = nil self.dnsLocalMonitorTask = nil
dnsClient?.stop()
await dnsLocalClient?.stop() await dnsLocalClient?.stop()
let superClient = self.superClient let superClient = self.superClient
@ -277,6 +278,7 @@ extension SDLContextActor {
// MARK: // MARK:
extension SDLContextActor { extension SDLContextActor {
// super/stun // super/stun
private func sendSuperPacket(type: SDLPacketType, data: Data) async { private func sendSuperPacket(type: SDLPacketType, data: Data) async {
await self.sendPacket(type: type, data: data, remoteAddress: self.config.stunSocketAddress) await self.sendPacket(type: type, data: data, remoteAddress: self.config.stunSocketAddress)
@ -323,7 +325,6 @@ extension SDLContextActor {
private func startSuperClient() async throws { private func startSuperClient() async throws {
let superClient = SDLSuperClient(host: self.config.serverHost, port: 1443) let superClient = SDLSuperClient(host: self.config.serverHost, port: 1443)
self.superClient = superClient self.superClient = superClient
await superClient.start() await superClient.start()
do { do {
@ -331,14 +332,11 @@ extension SDLContextActor {
try await runSuperClient(superClient) try await runSuperClient(superClient)
} onCancel: { } onCancel: {
SDLLogger.log("[SDLContext] startSuperClient onCancel", for: .debug) SDLLogger.log("[SDLContext] startSuperClient onCancel", for: .debug)
Task { Task {
await superClient.stop() await superClient.stop()
} }
} }
await cleanupSuperClient(superClient) await cleanupSuperClient(superClient)
} catch { } catch {
await cleanupSuperClient(superClient) await cleanupSuperClient(superClient)
SDLLogger.log("[SDLContext] startSuperClient catch err: \(error)") SDLLogger.log("[SDLContext] startSuperClient catch err: \(error)")
@ -688,8 +686,6 @@ extension SDLContextActor {
await self?.setNatType(natType: natType) await self?.setNatType(natType: natType)
} }
SDLLogger.log("[SDLContext] udpHole ready")
do { do {
try await withTaskCancellationHandler { try await withTaskCancellationHandler {
for try await (remoteAddress, message) in await udpHole.messageStream() { for try await (remoteAddress, message) in await udpHole.messageStream() {
@ -878,6 +874,7 @@ extension SDLContextActor {
// MARK: Stun // MARK: Stun
extension SDLContextActor { extension SDLContextActor {
// MARK: -- StunRequestTask // MARK: -- StunRequestTask
private func startStunRequestTask(welcome: SDLWelcome) async { private func startStunRequestTask(welcome: SDLWelcome) async {
self.stunRequestTask?.cancel() self.stunRequestTask?.cancel()
@ -890,7 +887,7 @@ extension SDLContextActor {
// welcome使ipv6 // welcome使ipv6
// //
self.stunRequestTask = Task.detached { [weak self] in self.stunRequestTask = Task { [weak self] in
let timerStream = SDLAsyncTimerStream() let timerStream = SDLAsyncTimerStream()
timerStream.start(interval: .seconds(8)) timerStream.start(interval: .seconds(8))
@ -935,7 +932,7 @@ extension SDLContextActor {
} }
} }
// MARK: Tun // MARK: NEPacketTunnelProvider
extension SDLContextActor { extension SDLContextActor {
// , 线packetFlow // , 线packetFlow
@ -945,21 +942,19 @@ extension SDLContextActor {
// //
let provider = self.provider let provider = self.provider
self.readTask = Task.detached(priority: .high) { [weak self] in self.readTask = Task(priority: .high) {
repeat { repeat {
if Task.isCancelled { do {
return try Task.checkCancellation()
} let (packets, numbers) = await provider.packetFlow.readPackets()
try Task.checkCancellation()
let (packets, numbers) = await provider.packetFlow.readPackets() for (data, number) in zip(packets, numbers) where number == 2 {
if Task.isCancelled { if let ipPacket = IPPacket(data) {
return await self.dealTunPacket(packet: ipPacket)
} }
for (data, number) in zip(packets, numbers) where number == 2 {
if let ipPacket = IPPacket(data) {
await self?.dealTunPacket(packet: ipPacket)
} }
} catch let err {
SDLLogger.log("[SDLContext] readTask catch error: \(err)")
} }
} while true } while true
} }
@ -1061,10 +1056,10 @@ extension SDLContextActor {
let nePacket = NEPacket(data: ipPacketData, protocolFamily: 2) let nePacket = NEPacket(data: ipPacketData, protocolFamily: 2)
self.provider.packetFlow.writePacketObjects([nePacket]) self.provider.packetFlow.writePacketObjects([nePacket])
case .cloudDNS(let name, let ipPacketData): case .cloudDNS(let name, let ipPacketData):
//SDLLogger.log("[SDLContext] get cloud dns request: \(name)") SDLLogger.log("[SDLContext] get cloud dns request: \(name)")
await self.dnsClient?.forward(ipPacketData: ipPacketData) self.dnsClient?.forward(ipPacketData: ipPacketData)
case .localDNS(let name, let payload, let tracker): 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) await self.dnsLocalClient?.query(tracker: tracker, dnsPayload: payload)
case .forwardToNextHop(let ip, let type, let data, let kind): case .forwardToNextHop(let ip, let type, let data, let kind):
await self.forwardPacketToNextHop(ip: ip, type: type, data: data, kind: kind) await self.forwardPacketToNextHop(ip: ip, type: type, data: data, kind: kind)