From 9710603feb6a458314145bfc4c4814657b16346a Mon Sep 17 00:00:00 2001 From: sgrebnov Date: Fri, 30 Jan 2015 16:10:59 +0300 Subject: [PATCH] CB-8384 Network status change support on Windows --- src/windows/NetworkInfoProxy.js | 106 ++++++++++++++++---------------- 1 file changed, 52 insertions(+), 54 deletions(-) diff --git a/src/windows/NetworkInfoProxy.js b/src/windows/NetworkInfoProxy.js index a536db2..27ad2f0 100644 --- a/src/windows/NetworkInfoProxy.js +++ b/src/windows/NetworkInfoProxy.js @@ -24,67 +24,65 @@ var cordova = require('cordova'); var Connection = require('./Connection'); +var winNetConn = Windows.Networking.Connectivity; +var networkInfo = winNetConn.NetworkInformation; +var networkCostInfo = winNetConn.NetworkCostType; +var networkConnectivityInfo = winNetConn.NetworkConnectivityLevel; +var networkAuthenticationInfo = winNetConn.NetworkAuthenticationType; +var networkEncryptionInfo = winNetConn.NetworkEncryptionType; + +function getCurrrentConnectionType() { + + var profile = networkInfo.getInternetConnectionProfile(); + + if (!profile) { + return Connection.NONE; + } + + var conLevel = profile.getNetworkConnectivityLevel(); + var interfaceType = profile.networkAdapter.ianaInterfaceType; + + // since we use this to detect whether we are online or offline we do check agains InternetAccess + // localAccess (airplane mode as an example) or constrainedInternetAccess mean there is no access to the internet available + // https://msdn.microsoft.com/library/windows/apps/windows.networking.connectivity.networkconnectivitylevel.aspx + if (conLevel != Windows.Networking.Connectivity.NetworkConnectivityLevel.internetAccess) { + return Connection.NONE; + } + + var connectionType; + + switch (interfaceType) { + case 71: + connectionType = Connection.WIFI; + break; + case 6: + connectionType = Connection.ETHERNET; + break; + case 243: // (3GPP WWAN) // Fallthrough is intentional + case 244: // (3GPP2 WWAN) + connectionType = Connection.CELL_3G; + break; + default: + connectionType = Connection.UNKNOWN; + break; + } + + return connectionType; +} + module.exports = { getConnectionInfo:function(win,fail,args) { - console.log("NetworkStatusProxy::getConnectionInfo"); - var winNetConn = Windows.Networking.Connectivity; - var networkInfo = winNetConn.NetworkInformation; - var networkCostInfo = winNetConn.NetworkCostType; - var networkConnectivityInfo = winNetConn.NetworkConnectivityLevel; - var networkAuthenticationInfo = winNetConn.NetworkAuthenticationType; - var networkEncryptionInfo = winNetConn.NetworkEncryptionType; - - var connectionType; - - var profile = Windows.Networking.Connectivity.NetworkInformation.getInternetConnectionProfile(); - if(profile) { - var conLevel = profile.getNetworkConnectivityLevel(); - var interfaceType = profile.networkAdapter.ianaInterfaceType; - - // since we use this to detect whether we are online or offline we do check agains InternetAccess - // localAccess (airplane mode as an example) or constrainedInternetAccess mean there is no access to the internet available - // https://msdn.microsoft.com/library/windows/apps/windows.networking.connectivity.networkconnectivitylevel.aspx - if (conLevel != Windows.Networking.Connectivity.NetworkConnectivityLevel.internetAccess) { - connectionType = Connection.NONE; - } - else { - switch (interfaceType) { - case 71: - connectionType = Connection.WIFI; - break; - case 6: - connectionType = Connection.ETHERNET; - break; - case 243: // (3GPP WWAN) // Fallthrough is intentional - case 244: // (3GPP2 WWAN) - connectionType = Connection.CELL_3G; - break; - default: - connectionType = Connection.UNKNOWN; - break; - } - } + var reportConnectionInfoOnce = function () { + win(getCurrrentConnectionType(), { keepCallback: true }); } - // FYI - //Connection.UNKNOWN 'Unknown connection'; - //Connection.ETHERNET 'Ethernet connection'; - //Connection.WIFI 'WiFi connection'; - //Connection.CELL_2G 'Cell 2G connection'; - //Connection.CELL_3G 'Cell 3G connection'; - //Connection.CELL_4G 'Cell 4G connection'; - //Connection.NONE 'No network connection'; - setTimeout(function () { - if (connectionType) { - win(connectionType); - } else { - win(Connection.NONE); - } - },0); + // report current connection type + setTimeout(reportConnectionInfoOnce, 0); + // start traking future changes + networkInfo.addEventListener("networkstatuschanged", reportConnectionInfoOnce); } - }; require("cordova/exec/proxy").add("NetworkStatus",module.exports);