A small menubar app that allows you to switch between R versions quickly (if you have multiple versions of R framework installed).
https://rud.is/rswitch
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.8 KiB
51 lines
1.8 KiB
//
|
|
// Reachable.swift
|
|
// RSwitch
|
|
//
|
|
// Created by hrbrmstr on 2/11/20.
|
|
// Copyright © 2020 Bob Rudis. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import SystemConfiguration
|
|
|
|
protocol Utilities {}
|
|
extension NSObject: Utilities {
|
|
enum ReachabilityStatus {
|
|
case notReachable
|
|
case reachableViaWWAN
|
|
case reachableViaWiFi
|
|
}
|
|
|
|
var currentReachabilityStatus: ReachabilityStatus {
|
|
|
|
var zeroAddress = sockaddr_in()
|
|
zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
|
|
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 {
|
|
return .notReachable
|
|
}
|
|
|
|
var flags: SCNetworkReachabilityFlags = []
|
|
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
|
|
return .notReachable
|
|
}
|
|
|
|
if flags.contains(.reachable) == false {
|
|
// The target host is not reachable.
|
|
return .notReachable
|
|
} else if flags.contains(.connectionRequired) == false {
|
|
// If the target host is reachable and no connection is required then we'll assume that you're on Wi-Fi...
|
|
return .reachableViaWiFi
|
|
} else if (flags.contains(.connectionOnDemand) == true || flags.contains(.connectionOnTraffic) == true) && flags.contains(.interventionRequired) == false {
|
|
// The connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs and no [user] intervention is needed
|
|
return .reachableViaWiFi
|
|
} else {
|
|
return .notReachable
|
|
}
|
|
}
|
|
}
|
|
|