From 5e8b403fbf4f17718c704b9945448a0f15ad865c Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Thu, 21 May 2026 23:57:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BB=A3=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tun/Super/SDLSuperService.swift | 28 ------------ Tun/Super/SDLSuperServiceProxy.swift | 36 ++++++++++++++++ Tun/UDPHole/SDLUDPHoleService.swift | 46 -------------------- Tun/UDPHole/SDLUDPHoleServiceProxy.swift | 54 ++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 74 deletions(-) create mode 100644 Tun/Super/SDLSuperServiceProxy.swift create mode 100644 Tun/UDPHole/SDLUDPHoleServiceProxy.swift diff --git a/Tun/Super/SDLSuperService.swift b/Tun/Super/SDLSuperService.swift index a02a368..b255757 100644 --- a/Tun/Super/SDLSuperService.swift +++ b/Tun/Super/SDLSuperService.swift @@ -110,31 +110,3 @@ actor SDLSuperService { } } -actor SDLSuperServiceProxy { - private var superService: SDLSuperService? - private var generation: UInt64 = 0 - - func replace(_ superService: SDLSuperService?) async { - self.generation &+= 1 - - let oldSuperService = self.superService - self.superService = superService - - if oldSuperService !== superService { - await oldSuperService?.stop() - } - } - - func stop() async { - self.generation &+= 1 - - let superService = self.superService - self.superService = nil - - await superService?.stop() - } - - func send(type: SDLPacketType, data: Data) async { - await self.superService?.send(type: type, data: data) - } -} diff --git a/Tun/Super/SDLSuperServiceProxy.swift b/Tun/Super/SDLSuperServiceProxy.swift new file mode 100644 index 0000000..aeb9360 --- /dev/null +++ b/Tun/Super/SDLSuperServiceProxy.swift @@ -0,0 +1,36 @@ +// +// SDLSuperServiceProxy.swift +// punchnet +// +// Created by 安礼成 on 2026/5/21. +// +import Foundation + +actor SDLSuperServiceProxy { + private var superService: SDLSuperService? + private var generation: UInt64 = 0 + + func replace(_ superService: SDLSuperService?) async { + self.generation &+= 1 + + let oldSuperService = self.superService + self.superService = superService + + if oldSuperService !== superService { + await oldSuperService?.stop() + } + } + + func stop() async { + self.generation &+= 1 + + let superService = self.superService + self.superService = nil + + await superService?.stop() + } + + func send(type: SDLPacketType, data: Data) async { + await self.superService?.send(type: type, data: data) + } +} diff --git a/Tun/UDPHole/SDLUDPHoleService.swift b/Tun/UDPHole/SDLUDPHoleService.swift index 2f8fedb..9f13891 100644 --- a/Tun/UDPHole/SDLUDPHoleService.swift +++ b/Tun/UDPHole/SDLUDPHoleService.swift @@ -251,49 +251,3 @@ actor SDLUDPHoleService { } } } - -actor SDLUDPHoleServiceProxy { - typealias ControlEventHandler = @Sendable (SDLUDPHoleService.Event) async -> Void - - private var udpHoleService: SDLUDPHoleService? - private var generation: UInt64 = 0 - - func makeEventHandler(onControlEvent: @escaping ControlEventHandler) -> SDLUDPHoleService.EventHandler { - self.generation &+= 1 - let generation = self.generation - - return { [weak self] event in - await self?.handleEvent(event, generation: generation, onControlEvent: onControlEvent) - } - } - - func replace(_ udpHoleService: SDLUDPHoleService?) async { - let oldUDPHoleService = self.udpHoleService - self.udpHoleService = udpHoleService - - if oldUDPHoleService !== udpHoleService { - await oldUDPHoleService?.stop() - } - } - - func stop() async { - self.generation &+= 1 - - let udpHoleService = self.udpHoleService - self.udpHoleService = nil - - await udpHoleService?.stop() - } - - func send(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) async { - await self.udpHoleService?.send(type: type, data: data, remoteAddress: remoteAddress) - } - - private func handleEvent(_ event: SDLUDPHoleService.Event, generation: UInt64, onControlEvent: ControlEventHandler) async { - guard generation == self.generation else { - return - } - - await onControlEvent(event) - } -} diff --git a/Tun/UDPHole/SDLUDPHoleServiceProxy.swift b/Tun/UDPHole/SDLUDPHoleServiceProxy.swift new file mode 100644 index 0000000..e4c7aa7 --- /dev/null +++ b/Tun/UDPHole/SDLUDPHoleServiceProxy.swift @@ -0,0 +1,54 @@ +// +// SDLUDPHoleServiceProxy.swift +// punchnet +// +// Created by 安礼成 on 2026/5/21. +// +import Foundation +import NIOCore + +actor SDLUDPHoleServiceProxy { + typealias ControlEventHandler = @Sendable (SDLUDPHoleService.Event) async -> Void + + private var udpHoleService: SDLUDPHoleService? + private var generation: UInt64 = 0 + + func makeEventHandler(onControlEvent: @escaping ControlEventHandler) -> SDLUDPHoleService.EventHandler { + self.generation &+= 1 + let generation = self.generation + + return { [weak self] event in + await self?.handleEvent(event, generation: generation, onControlEvent: onControlEvent) + } + } + + func replace(_ udpHoleService: SDLUDPHoleService?) async { + let oldUDPHoleService = self.udpHoleService + self.udpHoleService = udpHoleService + + if oldUDPHoleService !== udpHoleService { + await oldUDPHoleService?.stop() + } + } + + func stop() async { + self.generation &+= 1 + + let udpHoleService = self.udpHoleService + self.udpHoleService = nil + + await udpHoleService?.stop() + } + + func send(type: SDLPacketType, data: Data, remoteAddress: SocketAddress) async { + await self.udpHoleService?.send(type: type, data: data, remoteAddress: remoteAddress) + } + + private func handleEvent(_ event: SDLUDPHoleService.Event, generation: UInt64, onControlEvent: ControlEventHandler) async { + guard generation == self.generation else { + return + } + + await onControlEvent(event) + } +}