Posts

Post marked as solved
4 Replies
321 Views
Hi, I am currently building my own VPN application using NetworkExtension's PacketTunnelProvider. I want to send information from the PacketTunnelProvider to the ViewController when a VPN connection fails and to tell the user why. The code now is as shown below. When the startTunnel() being overwritten is executed, somehow NotificationCenter.default.post(name: NSNotification.Name.NEVPNStatusDidChange, object: nil) is executed and VPNStatusDidChange(_ notification: Notification?) in the ViewController is called and displays some message. I tried to do the same thing by writing NotificationCenter.default.post(name: NSNotification.Name(rawValue: "testnotify"), object: nil) in the PacketTunnelProvider.swift , but it does not work. What is wrong? Here is a part of current PacketTunnelProvider.swift override func startTunnel(options: [String : NSObject]? = nil, completionHandler: @escaping (Error?) -> Void) {   conf = (self.protocolConfiguration as! NETunnelProviderProtocol).providerConfiguration! as [String : AnyObject]   self.setupWSSession()       DispatchQueue.global().async {     while (self.connectionPhase < 5) {       Thread.sleep(forTimeInterval: 0.5)     }     self.tunToWS()   } NotificationCenter.default.post(name: NSNotification.Name(rawValue: "testnotify"), object: nil) } And here is a part of ViewController.swift override func viewDidLoad() {     super.viewDidLoad()     initVPNTunnelProviderManager()     NotificationCenter.default.addObserver(self, selector: #selector(ViewController.VPNStatusDidChange(_:)), name: NSNotification.Name.NEVPNStatusDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(ViewController.receieve(_:)), name: NSNotification.Name(rawValue: "testnotify"), object: nil)     } @objc func VPNStatusDidChange(_ notification: Notification?) {   print("VPN Status changed:")   let status = self.vpnManager.connection.status   switch status {   case .connecting:     print("Connecting...")     connectButton.setTitle("Disconnect", for: .normal)     break   case .connected:     print("Connected...")     connectButton.setTitle("Disconnect", for: .normal)     break   case .disconnecting:     print("Disconnecting...")     break   case .disconnected:     print("Disconnected...")     connectButton.setTitle("Connect", for: .normal)     break   case .invalid:     print("Invliad")     break   case .reasserting:     print("Reasserting...")     break   } } @objc func receive(_ notification: Notification?) {     print("receive Notification!") }
Posted Last updated
.
Post marked as solved
2 Replies
217 Views
Hi. I am currently implementing inter-application communication using DistributedNotificationCenter within swift 5.6 and Xcode Version 13.3.1 (13E500a). So I typed the code below into Playground, but I get the error "Cannot find 'DistributedNotificationCenter' in scope". import Foundation let dnc = DistributedNotificationCenter.default() As this document says, DistributedNotificationCenter is included in the Fundation, so I should be able to use it if I write it that way, but I can't. I would appreciate it if you could tell me how I can use DistributedNotificationCenter Thanks,
Posted Last updated
.