diff --git a/Tun/PacketTunnelProvider.swift b/Tun/PacketTunnelProvider.swift index 0cf719a..62a43fd 100644 --- a/Tun/PacketTunnelProvider.swift +++ b/Tun/PacketTunnelProvider.swift @@ -17,8 +17,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider { private var rootTask: Task? override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) { + // 重置通知中心 SDLTunnelAppNotifier.shared.clear() - + // 如果当前在运行状态,不允许重复请求 guard self.contextActor == nil else { completionHandler(TunnelError.invalidContext) @@ -57,28 +58,18 @@ class PacketTunnelProvider: NEPacketTunnelProvider { override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) { // Add code here to handle the message. - Task { - if let message = try? NEMessage(serializedBytes: messageData) { - switch message.message { - case .exitNodeIpChanged(let exitNodeIpChanged): - let exitNodeIp = exitNodeIpChanged.ip - do { - try await self.contextActor?.updateExitNode(exitNodeIp: exitNodeIp) - var reply = NEReply() - reply.code = 0 - reply.message = "操作成功" - completionHandler?(try reply.serializedData()) - - } catch let err { - var reply = NEReply() - reply.code = 1 - reply.message = err.localizedDescription - completionHandler?(try reply.serializedData()) - } - case .none: - () - } + do { + let message = try NEMessage(serializedBytes: messageData) + let replyData = try await self.handleAppEvent(message: message) + completionHandler?(replyData) + } catch let err { + var reply = NEReply() + reply.code = 1 + reply.message = err.localizedDescription + + let errorReplyData = try? reply.serializedData() + completionHandler?(errorReplyData) } } } @@ -92,6 +83,29 @@ class PacketTunnelProvider: NEPacketTunnelProvider { // Add code here to wake up. } + private func handleAppEvent(message: NEMessage) async throws -> Data? { + switch message.message { + case .exitNodeIpChanged(let exitNodeIpChanged): + let exitNodeIp = exitNodeIpChanged.ip + do { + try await self.contextActor?.updateExitNode(exitNodeIp: exitNodeIp) + var reply = NEReply() + reply.code = 0 + reply.message = "操作成功" + return try reply.serializedData() + + } catch let err { + var reply = NEReply() + reply.code = 1 + reply.message = err.localizedDescription + + return try reply.serializedData() + } + case .none: + return nil + } + } + } // 获取物理网卡ip地址 diff --git a/punchnet/punchnetApp.swift b/punchnet/punchnetApp.swift index 5addf40..6b130a7 100644 --- a/punchnet/punchnetApp.swift +++ b/punchnet/punchnetApp.swift @@ -86,13 +86,7 @@ struct punchnetApp: App { class AppDelegate: NSObject, NSApplicationDelegate { func applicationWillFinishLaunching(_ notification: Notification) { - let shared = UserDefaults(suiteName: SDLNotificationCenter.Configuration.appGroupSuiteName) - shared?.set("App says hello", forKey: "test_msg") - shared?.synchronize() - SDLNotificationCenter.shared.addObserver(for: .vpnStatusChanged) { name in - NSLog("DarwinNotificationCenter get message: \(name)") - } } func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {