| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- //
- // HXProcessNotification.swift
- // ScreenShareExtension
- //
- // Created by Bugu on 2023/10/25.
- // Copyright © 2023 Bugu. All rights reserved.
- //
- import Foundation
- import CoreFoundation
- struct HXProcessNotification {
-
-
- static let callback: CFNotificationCallback = { (center: CFNotificationCenter?, observer: UnsafeMutableRawPointer?, name: CFNotificationName?, object: UnsafeRawPointer?, userInfo: CFDictionary?) in
- DispatchQueue.main.async {
- if let identifier = name?.rawValue as String? {
- NotificationCenter.default.post(name: Notification.Name(identifier), object: identifier)
- }
- }
- }
- static func addObserver(_ observer: AnyObject, selector: Selector, notificationName: String, object: Any?) {
- DispatchQueue.main.async {
- let center = CFNotificationCenterGetDarwinNotifyCenter()
- let pointerObserver = Unmanaged.passUnretained(observer).toOpaque()
- CFNotificationCenterAddObserver(center, pointerObserver, self.callback, notificationName as CFString, nil, .deliverImmediately)
- NotificationCenter.default.addObserver(observer, selector: selector, name: NSNotification.Name(rawValue: notificationName), object: object)
- }
- }
- static func removeObserver(_ observer: AnyObject, notificationName: String) {
- let center = CFNotificationCenterGetDarwinNotifyCenter()
- let pointerObserver = Unmanaged.passUnretained(observer).toOpaque()
- CFNotificationCenterRemoveObserver(center, pointerObserver, CFNotificationName(notificationName as CFString) , nil)
- NotificationCenter.default.removeObserver(observer, name: NSNotification.Name(rawValue: notificationName), object: nil)
- }
- static func removeObserver(_ observer: AnyObject) {
- let center = CFNotificationCenterGetDarwinNotifyCenter()
- let pointerObserver = Unmanaged.passUnretained(observer).toOpaque()
- CFNotificationCenterRemoveEveryObserver(center, pointerObserver)
- NotificationCenter.default.removeObserver(observer)
- }
- static func postNotificationName(_ notificationName: String, userInfo: [String : Any]?) {
- DispatchQueue.main.async {
- let center = CFNotificationCenterGetDarwinNotifyCenter()
- let userInfo = userInfo as CFDictionary?
- CFNotificationCenterPostNotification(center, CFNotificationName(notificationName as CFString), nil, userInfo, true)
- }
- }
- }
|