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>?
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

View File

@ -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 {