Files
Woka_Native_iOS/WOKA/Helpers/connectedness.swift
BilalKhanWDI 995946b723 - Updating fav likes for karaoke
- Updated fav likes for audio books
2024-07-18 20:32:42 +05:30

82 lines
3.3 KiB
Swift

import Foundation
import SystemConfiguration
public func connectedToNetwork() {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
print("Network Unreachable - Zero Address")
return
}
var flags: SCNetworkReachabilityFlags = []
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
print("Network Unreachable - Check Flags")
return
}
let isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
connectedSpeed().testDownloadSpeedWithTimeout(5.0) { (megabytesPerSecond, error) in
if error == nil && isReachable && !needsConnection {
if let speed = megabytesPerSecond, speed >= 0.05 {
print("\n | Connected |")
print("=======Network Speed=======\nMBps: \(speed)\nerror: \(String(describing: error))\n=======-------------=======\n")
} else {
print("\n ? Connected ?")
print("*======| WEAK SIGNAL |======*\nMBps: \(String(describing: megabytesPerSecond))\nerror: \(String(describing: error))\n*=======-------------=======*\n")
}
} else {
print("NETWORK ERROR: \(String(describing: error))")
}
}
}
public class connectedSpeed: NSObject, URLSessionDelegate, URLSessionDataDelegate {
var startTime: CFAbsoluteTime!
var stopTime: CFAbsoluteTime!
var bytesReceived: Int!
var speedTestCompletionHandler: ((Double?, Error?) -> Void)!
public func testDownloadSpeedWithTimeout(_ timeout: TimeInterval, completionHandler: @escaping (Double?, Error?) -> Void) {
guard let url = URL(string: "https://wokaland.com/") else {
completionHandler(nil, NSError(domain: "Invalid URL", code: -1, userInfo: nil))
return
}
startTime = CFAbsoluteTimeGetCurrent()
stopTime = startTime
bytesReceived = 0
speedTestCompletionHandler = completionHandler
let configuration = URLSessionConfiguration.ephemeral
configuration.timeoutIntervalForResource = timeout
let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
session.dataTask(with: url).resume()
}
public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
bytesReceived += data.count
stopTime = CFAbsoluteTimeGetCurrent()
}
public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
let elapsed = stopTime - startTime
guard elapsed != 0 && (error == nil || (error as NSError?)?.domain == NSURLErrorDomain && (error as NSError?)?.code == NSURLErrorTimedOut) else {
speedTestCompletionHandler(nil, error)
return
}
let speed = elapsed != 0 ? Double(bytesReceived) / elapsed / 1024.0 / 1024.0 : -1
speedTestCompletionHandler(speed, nil)
}
}