UNPKG

tns-core-modules

Version:

Telerik NativeScript Core Modules

74 lines (73 loc) 2.71 kB
var common = require("./connectivity-common"); global.moduleMerge(common, exports); function _createReachability(host) { if (host) { return SCNetworkReachabilityCreateWithName(null, host); } else { var zeroAddress = new interop.Reference(sockaddr, { sa_len: 16, sa_family: 2 }); return SCNetworkReachabilityCreateWithAddress(null, zeroAddress); } } function _getReachabilityFlags(host) { var reachability = _createReachability(host); var flagsRef = new interop.Reference(); var gotFlags = SCNetworkReachabilityGetFlags(reachability, flagsRef); if (!gotFlags) { return null; } return flagsRef.value; } function _getConnectionType(host) { var flags = _getReachabilityFlags(host); return _getConnectionTypeFromFlags(flags); } function _getConnectionTypeFromFlags(flags) { if (!flags) { return common.connectionType.none; } var isReachable = flags & kSCNetworkReachabilityFlagsReachable; var connectionRequired = flags & kSCNetworkReachabilityFlagsConnectionRequired; if (!isReachable || connectionRequired) { return common.connectionType.none; } var isWWAN = flags & kSCNetworkReachabilityFlagsIsWWAN; if (isWWAN) { return common.connectionType.mobile; } return common.connectionType.wifi; } function getConnectionType() { return _getConnectionType(); } exports.getConnectionType = getConnectionType; function _reachabilityCallback(target, flags, info) { if (_connectionTypeChangedCallback) { var newConnectionType = _getConnectionTypeFromFlags(flags); _connectionTypeChangedCallback(newConnectionType); } } var _reachabilityCallbackFunctionRef = new interop.FunctionReference(_reachabilityCallback); var _monitorReachabilityRef; var _connectionTypeChangedCallback; function startMonitoring(connectionTypeChangedCallback) { if (!_monitorReachabilityRef) { _monitorReachabilityRef = _createReachability(); _connectionTypeChangedCallback = connectionTypeChangedCallback; SCNetworkReachabilitySetCallback(_monitorReachabilityRef, _reachabilityCallbackFunctionRef, null); SCNetworkReachabilityScheduleWithRunLoop(_monitorReachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); } } exports.startMonitoring = startMonitoring; function stopMonitoring() { if (_monitorReachabilityRef) { SCNetworkReachabilityUnscheduleFromRunLoop(_monitorReachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); _monitorReachabilityRef = undefined; _connectionTypeChangedCallback = undefined; ; } } exports.stopMonitoring = stopMonitoring;