58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) Microsoft Corporation. All rights reserved.
 | |
| // Licensed under the MIT License.
 | |
| 
 | |
| #include "pch.h"
 | |
| #include "NetworkManager.h"
 | |
| 
 | |
| using namespace CalculatorApp;
 | |
| using namespace Platform;
 | |
| using namespace Windows::Networking::Connectivity;
 | |
| 
 | |
| NetworkManager::NetworkManager()
 | |
| {
 | |
|     m_NetworkStatusChangedToken =
 | |
|         NetworkInformation::NetworkStatusChanged += ref new NetworkStatusChangedEventHandler(
 | |
|             this, &NetworkManager::OnNetworkStatusChange, CallbackContext::Same);
 | |
| }
 | |
| 
 | |
| NetworkManager::~NetworkManager()
 | |
| {
 | |
|     NetworkInformation::NetworkStatusChanged -= m_NetworkStatusChangedToken;
 | |
| }
 | |
| 
 | |
| NetworkAccessBehavior NetworkManager::GetNetworkAccessBehavior()
 | |
| {
 | |
|     NetworkAccessBehavior behavior = NetworkAccessBehavior::Offline;
 | |
|     ConnectionProfile^ connectionProfile = NetworkInformation::GetInternetConnectionProfile();
 | |
|     if (connectionProfile != nullptr)
 | |
|     {
 | |
|         NetworkConnectivityLevel connectivityLevel = connectionProfile->GetNetworkConnectivityLevel();
 | |
|         if (connectivityLevel == NetworkConnectivityLevel::InternetAccess
 | |
|             || connectivityLevel == NetworkConnectivityLevel::ConstrainedInternetAccess)
 | |
|         {
 | |
|             ConnectionCost^ connectionCost = connectionProfile->GetConnectionCost();
 | |
|             behavior = ConvertCostInfoToBehavior(connectionCost);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return behavior;
 | |
| }
 | |
| 
 | |
| void NetworkManager::OnNetworkStatusChange(_In_ Object^ /*sender*/)
 | |
| {
 | |
|     NetworkBehaviorChanged(GetNetworkAccessBehavior());
 | |
| }
 | |
| 
 | |
| // See app behavior guidelines at https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj835821(v=win.10).aspx
 | |
| NetworkAccessBehavior NetworkManager::ConvertCostInfoToBehavior(_In_ ConnectionCost^ connectionCost)
 | |
| {
 | |
|     if (connectionCost->Roaming || connectionCost->OverDataLimit
 | |
|         || connectionCost->NetworkCostType == NetworkCostType::Variable
 | |
|         || connectionCost->NetworkCostType == NetworkCostType::Fixed)
 | |
|     {
 | |
|         return NetworkAccessBehavior::OptIn;
 | |
|     }
 | |
| 
 | |
|     return NetworkAccessBehavior::Normal;
 | |
| }
 |