import Foundation /// Throttles Darwin notification posting to at most once per 0.5 seconds. /// Prevents flooding the main app with hundreds of "new traffic" notifications. public final class NotificationThrottle: @unchecked Sendable { public static let shared = NotificationThrottle() private let lock = NSLock() private var pending = false private let interval: TimeInterval = 0.5 private init() {} public func throttle() { lock.lock() if pending { lock.unlock() ProxyLogger.ipc.debug("NotificationThrottle: suppressed newTraffic while pending") return } pending = true lock.unlock() DispatchQueue.global().asyncAfter(deadline: .now() + interval) { [weak self] in self?.lock.lock() self?.pending = false self?.lock.unlock() ProxyLogger.ipc.debug("NotificationThrottle: emitting throttled newTraffic") IPCManager.shared.post(.newTrafficCaptured) } } }