32 lines
804 B
Swift
32 lines
804 B
Swift
import Foundation
|
|
import Network
|
|
import Observation
|
|
|
|
@Observable
|
|
@MainActor
|
|
final class NetworkMonitor {
|
|
var isOnline: Bool = true
|
|
|
|
private let monitor = NWPathMonitor()
|
|
private let queue = DispatchQueue(label: "NetworkMonitor")
|
|
|
|
func start(onChange: @escaping @MainActor (Bool) -> Void) {
|
|
monitor.pathUpdateHandler = { [weak self] path in
|
|
let online = path.status == .satisfied
|
|
Task { @MainActor [weak self] in
|
|
guard let self else { return }
|
|
let previous = self.isOnline
|
|
self.isOnline = online
|
|
if previous != online {
|
|
onChange(online)
|
|
}
|
|
}
|
|
}
|
|
monitor.start(queue: queue)
|
|
}
|
|
|
|
func stop() {
|
|
monitor.cancel()
|
|
}
|
|
}
|