fix context 结构
This commit is contained in:
parent
7fba1fec07
commit
c3752bb688
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user