conversations-classic-ios/ConversationsClassic/AppData/Services/NetworkMonitor.swift

38 lines
904 B
Swift
Raw Normal View History

2024-08-11 00:28:01 +00:00
import Combine
import Network
extension NWPathMonitor {
func paths() -> AsyncStream<NWPath> {
AsyncStream { continuation in
pathUpdateHandler = { path in
continuation.yield(path)
}
continuation.onTermination = { [weak self] _ in
self?.cancel()
}
start(queue: DispatchQueue(label: "NSPathMonitor.paths"))
}
}
}
final actor NetworkMonitor: ObservableObject {
static let shared = NetworkMonitor()
@Published private(set) var isOnline: Bool = false
private let monitor = NWPathMonitor()
init() {
Task(priority: .background) {
await startMonitoring()
}
}
func startMonitoring() async {
let monitor = NWPathMonitor()
for await path in monitor.paths() {
isOnline = path.status == .satisfied
}
}
}