This snapshot establishes the camera-to-result recognition flow and related tests while checking in the project skill/docs assets required for the configured local tooling.
38 lines
964 B
Swift
38 lines
964 B
Swift
import Combine
|
|
import Foundation
|
|
import Network
|
|
|
|
protocol NetworkStatusProviding: AnyObject {
|
|
var isOnline: Bool { get }
|
|
func startMonitoring()
|
|
func stopMonitoring()
|
|
}
|
|
|
|
@MainActor
|
|
final class NetworkMonitor: ObservableObject, NetworkStatusProviding {
|
|
@Published private(set) var isOnline = true
|
|
|
|
private let monitor = NWPathMonitor()
|
|
private let queue = DispatchQueue(label: "StackDex.NetworkMonitor")
|
|
private var isMonitoring = false
|
|
|
|
func startMonitoring() {
|
|
guard !isMonitoring else { return }
|
|
isMonitoring = true
|
|
|
|
monitor.pathUpdateHandler = { [weak self] path in
|
|
let isSatisfied = path.status == .satisfied
|
|
DispatchQueue.main.async {
|
|
self?.isOnline = isSatisfied
|
|
}
|
|
}
|
|
monitor.start(queue: queue)
|
|
}
|
|
|
|
func stopMonitoring() {
|
|
guard isMonitoring else { return }
|
|
monitor.cancel()
|
|
isMonitoring = false
|
|
}
|
|
}
|