Files
Woka_Native_iOS/WOKA/Helpers/Network/NetworkMonitor.swift
2024-08-29 20:08:48 +05:30

61 lines
1.6 KiB
Swift

//
// NetworkMonitor.swift
// WOKA
//
// Created by MacBook Pro on 28/08/24.
//
import Foundation
import Network
extension Notification.Name {
static let connectivityStatus = Notification.Name(rawValue: "connectivityStatusChanged")
}
extension NWInterface.InterfaceType: CaseIterable {
public static var allCases: [NWInterface.InterfaceType] = [
.other,
.wifi,
.cellular,
.loopback,
.wiredEthernet
]
}
final class NetworkMonitor {
static let shared = NetworkMonitor()
private let queue = DispatchQueue(label: "NetworkConnectivityMonitor")
private let monitor: NWPathMonitor
private(set) var isConnected = false
private(set) var isExpensive = false
private(set) var currentConnectionType: NWInterface.InterfaceType?
private var isMonitoring = false
private init() {
monitor = NWPathMonitor()
}
func startMonitoring() {
if isMonitoring{
print("Already monitoring Network")
return
}
isMonitoring = true
monitor.pathUpdateHandler = { [weak self] path in
self?.isConnected = path.status != .unsatisfied
self?.isExpensive = path.isExpensive
self?.currentConnectionType = NWInterface.InterfaceType.allCases.filter { path.usesInterfaceType($0) }.first
NotificationCenter.default.post(name: .connectivityStatus, object: nil)
}
monitor.start(queue: queue)
}
func stopMonitoring() {
isMonitoring = false
print("Stopped monitoring Network")
monitor.cancel()
}
}