diff --git a/Tun/Punchnet/SDLContextActor.swift b/Tun/Punchnet/SDLContextActor.swift index 6234900..53fda12 100644 --- a/Tun/Punchnet/SDLContextActor.swift +++ b/Tun/Punchnet/SDLContextActor.swift @@ -172,10 +172,8 @@ actor SDLContextActor { // 获取当前udp启动的地址 let localAddress = udpHole.getLocalAddress() - self.udpHole = udpHole - + // 阻塞等待udpHole是准备好的状态 await udpHole.channelIsActived() - await self.handleUDPHoleReady() // 处理心跳逻辑 let pingTask = Task.detached { @@ -229,8 +227,19 @@ actor SDLContextActor { } } + self.udpHole = udpHole self.udpHoleWorkers = [pingTask, dataTask, signalTask] + // 开始探测nat的类型 + Task { + let natType = await self.proberActor.probeNatType(using: udpHole) + self.setNatType(natType: natType) + SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)") + } + + // 注册 + self.doRegisterSuper() + return udpHole } @@ -256,23 +265,6 @@ actor SDLContextActor { self.natType = natType } - // 处理和super的协商问题 - private func handleUDPHoleReady() { - guard let udpHole = self.udpHole else { - return - } - - // 开始探测nat的类型 - Task { - let natType = await self.proberActor.probeNatType(using: udpHole) - self.setNatType(natType: natType) - SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)") - } - - // 注册 - self.doRegisterSuper() - } - private func sendStunRequest() { guard let sessionToken = self.sessionToken else { return