This commit is contained in:
anlicheng 2026-04-15 14:41:05 +08:00
parent 8a3bfc342f
commit 610a33eced
2 changed files with 36 additions and 28 deletions

View File

@ -17,8 +17,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
private var rootTask: Task<Void, Error>? private var rootTask: Task<Void, Error>?
override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) { override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) {
//
SDLTunnelAppNotifier.shared.clear() SDLTunnelAppNotifier.shared.clear()
// //
guard self.contextActor == nil else { guard self.contextActor == nil else {
completionHandler(TunnelError.invalidContext) completionHandler(TunnelError.invalidContext)
@ -57,28 +58,18 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) { override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {
// Add code here to handle the message. // Add code here to handle the message.
Task { Task {
if let message = try? NEMessage(serializedBytes: messageData) { do {
switch message.message { let message = try NEMessage(serializedBytes: messageData)
case .exitNodeIpChanged(let exitNodeIpChanged): let replyData = try await self.handleAppEvent(message: message)
let exitNodeIp = exitNodeIpChanged.ip completionHandler?(replyData)
do { } catch let err {
try await self.contextActor?.updateExitNode(exitNodeIp: exitNodeIp) var reply = NEReply()
var reply = NEReply() reply.code = 1
reply.code = 0 reply.message = err.localizedDescription
reply.message = "操作成功"
completionHandler?(try reply.serializedData()) let errorReplyData = try? reply.serializedData()
completionHandler?(errorReplyData)
} catch let err {
var reply = NEReply()
reply.code = 1
reply.message = err.localizedDescription
completionHandler?(try reply.serializedData())
}
case .none:
()
}
} }
} }
} }
@ -92,6 +83,29 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
// Add code here to wake up. // 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 // ip

View File

@ -86,13 +86,7 @@ struct punchnetApp: App {
class AppDelegate: NSObject, NSApplicationDelegate { class AppDelegate: NSObject, NSApplicationDelegate {
func applicationWillFinishLaunching(_ notification: Notification) { 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 { func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {