调整生命周期的管理

This commit is contained in:
anlicheng 2026-05-05 17:53:46 +08:00
parent a2901a0f8f
commit 7f56806852
3 changed files with 13 additions and 41 deletions

View File

@ -154,9 +154,7 @@ actor SDLContextActor {
} }
self.superMonitorTask = self.startMonitorTask(name: "superMonitorTask") { self.superMonitorTask = self.startMonitorTask(name: "superMonitorTask") {
SDLLogger.log("[SDLContext] superClient running!!!!")
try await self.startSuperClient() try await self.startSuperClient()
SDLLogger.log("[SDLContext] superClient stop!!!!")
} }
} }
@ -376,8 +374,10 @@ actor SDLContextActor {
// nat // nat
Task { Task {
SDLLogger.log("[SDLContext] start probeNatType")
await self.probeNatType() await self.probeNatType()
} }
SDLLogger.log("[SDLContext] udpHole ready") SDLLogger.log("[SDLContext] udpHole ready")
do { do {
@ -525,10 +525,14 @@ actor SDLContextActor {
self.updatePolicyTask?.cancel() self.updatePolicyTask?.cancel()
self.updatePolicyTask = Task { self.updatePolicyTask = Task {
while !Task.isCancelled { do {
try? await Task.sleep(for: .seconds(300)) while true {
SDLLogger.log("[SDLContext] updatePolicyTask execute") try await Task.sleep(for: .seconds(300))
await self.identifyStore.batUpdatePolicy(using: self.quicClient, dstIdentityID: self.config.identityId) SDLLogger.log("[SDLContext] updatePolicyTask execute")
await self.identifyStore.batUpdatePolicy(using: self.quicClient, dstIdentityID: self.config.identityId)
}
} catch let err {
SDLLogger.log("[SDLContext] updatePolicyTask stop with err: \(err)")
} }
} }
} }
@ -730,9 +734,10 @@ extension SDLContextActor {
try Task.checkCancellation() try Task.checkCancellation()
try await body() try await body()
} catch is CancellationError { } catch is CancellationError {
SDLLogger.log("[SDLContext] worker \(name) cancelled", for: .debug)
break break
} catch let err { } catch let err {
SDLLogger.log("[SDLContextActor] worker \(name) crashed: \(err.localizedDescription)", for: .debug) SDLLogger.log("[SDLContext] worker \(name) crashed: \(err.localizedDescription), will restart", for: .debug)
do { do {
try await Task.sleep(for: retryDelay) try await Task.sleep(for: retryDelay)
} catch is CancellationError { } catch is CancellationError {

View File

@ -1,32 +0,0 @@
//
// SDLSupervisor.swift
// punchnet
//
// Created by on 2026/3/10.
//
actor SDLSupervisor {
private var loopChildWorkers: [Task<Void, Never>] = []
func addWorker(name: String, _ body: @escaping () async throws -> Void, retryDelay: Duration = .seconds(2)) {
let worker = Task(name: name) {
while !Task.isCancelled {
do {
try await body()
} catch is CancellationError {
break
} catch let err {
SDLLogger.log("[Supervisor] worker \(name) crashed: \(err.localizedDescription)", for: .debug)
try? await Task.sleep(for: retryDelay)
}
}
}
self.loopChildWorkers.append(worker)
}
func stop() {
self.loopChildWorkers.forEach { $0.cancel() }
self.loopChildWorkers.removeAll()
}
}

View File

@ -105,8 +105,7 @@ private final class SDLUDPHoleHandler: ChannelInboundHandler {
var buffer = envelope.data var buffer = envelope.data
let remoteAddress = envelope.remoteAddress let remoteAddress = envelope.remoteAddress
let byteCount = buffer.readableBytes - buffer.readerIndex SDLLogger.log("[SDLUDPHole] get raw bytes: \(buffer.readableBytes), from: \(remoteAddress)", for: .debug)
SDLLogger.log("[SDLUDPHole] get raw bytes: \(byteCount), from: \(remoteAddress)", for: .debug)
do { do {
if let message = try SDLHoleMessage.decode(buffer: &buffer) { if let message = try SDLHoleMessage.decode(buffer: &buffer) {