コード例 #1
0
        /// <summary>
        /// Get whether the requested resource is reachable with the specified flags
        /// </summary>
        /// <returns>
        /// <c>true</c> if the requested resource is reachable with the specified flags; otherwise, <c>false</c>.
        /// </returns>
        /// <param name='flags'>
        /// Reachability flags.
        /// </param>
        /// <remarks>
        /// This is for the case where you flick the airplane mode you end up getting something like this:
        /// Reachability: WR ct-----
        /// Reachability: -- -------
        /// Reachability: WR ct-----
        /// Reachability: -- -------
        /// We treat this as 4 UNREACHABLE triggers - really Apple should do better than this
        /// </remarks>
        private bool IsReachableWithFlags(NetworkReachabilityFlags flags)
        {
            if (!flags.HasFlag(NetworkReachabilityFlags.Reachable))
            {
                return(false);
            }

            var testCase = NetworkReachabilityFlags.ConnectionRequired | NetworkReachabilityFlags.TransientConnection;

            if ((flags & testCase) == testCase)
            {
                return(false);
            }

            if (HasWWAN)
            {
                // If we're connecting via WWAN, and WWAN doesn't count as connected, return false
                if (flags.HasFlag(NetworkReachabilityFlags.IsWWAN) && !AllowWWAN)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #2
0
        private bool ReachableViaWWAN(NetworkReachabilityFlags flags)
        {
            if (!HasWWAN)
            {
                return(false);
            }

            return(flags.HasFlag(NetworkReachabilityFlags.Reachable) && flags.HasFlag(NetworkReachabilityFlags.IsWWAN));
        }
コード例 #3
0
		void UpdateReachability (NetworkReachabilityFlags flags, NSImageView icon, NSTextField statusField)
		{
			if (flags.HasFlag (NetworkReachabilityFlags.Reachable) && !flags.HasFlag (NetworkReachabilityFlags.ConnectionRequired)) {
				icon.Image = NSImage.ImageNamed ("connected");
			} else {
				icon.Image = NSImage.ImageNamed ("disconnected");
			}

			statusField.StringValue = flags == 0 ? String.Empty : flags.ToString ();
		}
コード例 #4
0
 private void FlagsChanged(NetworkReachabilityFlags flags)
 {
     if (!ReachabilityKnown || flags != ReachabilityFlags)
     {
         ReachabilityFlags = flags;
         ReachabilityKnown = true;
         WriteLog.To.Sync.I(Tag, $"{this}: flags <-- {flags}");
         var status = flags.HasFlag(NetworkReachabilityFlags.Reachable) && !flags.HasFlag(NetworkReachabilityFlags.InterventionRequired) ?
                      NetworkReachabilityStatus.Reachable : NetworkReachabilityStatus.Unreachable;
         StatusChanged?.Invoke(this, new NetworkReachabilityChangeEventArgs(status));
     }
 }
コード例 #5
0
        void UpdateReachability(NetworkReachabilityFlags flags, NSImageView icon, NSTextField statusField)
        {
            if (flags.HasFlag(NetworkReachabilityFlags.Reachable) && !flags.HasFlag(NetworkReachabilityFlags.ConnectionRequired))
            {
                icon.Image = NSImage.ImageNamed("connected");
            }
            else
            {
                icon.Image = NSImage.ImageNamed("disconnected");
            }

            statusField.StringValue = flags == 0 ? String.Empty : flags.ToString();
        }
コード例 #6
0
ファイル: NetworkService.cs プロジェクト: tvvister91/Arena
 private void GetNetworkSetup(NetworkReachabilityFlags flags)
 {
     //  we're on wifi here
     if (flags.HasFlag(NetworkReachabilityFlags.IsWWAN))
     {
         //  what type of connectivity is available
         CTTelephonyNetworkInfo info = new CTTelephonyNetworkInfo();
         System.Diagnostics.Debug.WriteLine($"*** {GetType().Name}.{nameof(GetNetworkSetup)} - Cellular detected: {info.DebugDescription}");
         if ((info.CurrentRadioAccessTechnology == CTRadioAccessTechnology.GPRS) || (info.CurrentRadioAccessTechnology == CTRadioAccessTechnology.Edge))
         {
             ConnectionState = NetworkConnectionStates.CellularSlow;
             System.Diagnostics.Debug.WriteLine("Network Service - Connection speed designated to be SLOW.");
         }
         else
         {
             ConnectionState = NetworkConnectionStates.CellularFast;
             System.Diagnostics.Debug.WriteLine("Network Service - Connection speed designated to be FAST.");
         }
     }
     else
     {
         System.Diagnostics.Debug.WriteLine("Network Service - WIFI detected.");
         ConnectionState = NetworkConnectionStates.Wifi;
     }
 }
コード例 #7
0
        void HandleReachabilityChanged(NetworkReachabilityFlags flags)
        {
            Console.WriteLine($"Reachability Changed Event with {flags}");

            if (flags.HasFlag(NetworkReachabilityFlags.Reachable) && !IsConnected)
            {
                Task.Factory.StartNew(async() => await Connect());
            }
            else if (!flags.HasFlag(NetworkReachabilityFlags.Reachable) && IsConnected)
            {
                Disconnect();
            }
            else
            {
                ConnectionChanged?.Invoke(this, new ConnectionStatusEventArgs(IsConnected));
            }
        }
コード例 #8
0
 /// <summary>
 /// Utility method that gets the flags as a string
 /// </summary>
 /// <returns>
 /// The flags as string
 /// </returns>
 /// <param name='flags'>
 /// Flags
 /// </param>
 protected string GetFlagsAsString(NetworkReachabilityFlags flags)
 {
     return(string.Concat(
                !HasWWAN ? "X" : flags.HasFlag(NetworkReachabilityFlags.IsWWAN) ? "W" : "-",
                flags.HasFlag(NetworkReachabilityFlags.Reachable) ? "R" : "-",
                " ",
                flags.HasFlag(NetworkReachabilityFlags.ConnectionRequired) ? "c" : "-",
                flags.HasFlag(NetworkReachabilityFlags.TransientConnection) ? "t" : "-",
                flags.HasFlag(NetworkReachabilityFlags.InterventionRequired) ? "i" : "-",
                flags.HasFlag(NetworkReachabilityFlags.ConnectionOnTraffic) ? "C" : "-",
                flags.HasFlag(NetworkReachabilityFlags.ConnectionOnDemand) ? "D" : "-",
                flags.HasFlag(NetworkReachabilityFlags.IsLocalAddress) ? "l" : "-",
                flags.HasFlag(NetworkReachabilityFlags.IsDirect) ? "d" : "-"
                ));
 }
コード例 #9
0
        private bool ReachableViaWiFi(NetworkReachabilityFlags flags)
        {
            if (!flags.HasFlag(NetworkReachabilityFlags.Reachable))
            {
                return(false);
            }

            // If we don't have WWAN, reachable = WiFi (close enough)
            if (!HasWWAN)
            {
                return(true);
            }

            // We have WWAN, if we're connecting through WWAN, we're not connecting through WiFi
            if (flags.HasFlag(NetworkReachabilityFlags.IsWWAN))
            {
                return(false);
            }
            else
            {
                return(true); // Connecting through WiFi, not WWAN
            }
        }
コード例 #10
0
        private void ReachablilityCallback(NetworkReachabilityFlags flags)
        {
            var connected = flags.HasFlag(NetworkReachabilityFlags.Reachable);

            if (connected)
            {
                GetNetworkSetup(flags);
            }
            else
            {
                ConnectionState = NetworkConnectionStates.None;
            }
            OnConnectivityChanged?.Invoke(this, new EventArgs());
        }
コード例 #11
0
ファイル: NetworkService.cs プロジェクト: tvvister91/Arena
        private void ReachablilityCallback(NetworkReachabilityFlags flags)
        {
            System.Diagnostics.Debug.WriteLine($"*** {GetType().Name}.ReachablilityCallback - Callback!!");
            var connected = flags.HasFlag(NetworkReachabilityFlags.Reachable);

            if (connected)
            {
                GetNetworkSetup(flags);
            }
            else
            {
                ConnectionState = NetworkConnectionStates.None;
            }
            OnConnectivityChanged?.Invoke(this, new EventArgs());
        }
コード例 #12
0
 /// <summary>
 /// Utility method that gets the flags as a string
 /// </summary>
 /// <returns>
 /// The flags as string
 /// </returns>
 /// <param name='flags'>
 /// Flags
 /// </param>
 protected string GetFlagsAsString(NetworkReachabilityFlags flags)
 {
     return string.Concat(
         !HasWWAN ? "X" : flags.HasFlag(NetworkReachabilityFlags.IsWWAN) ? "W" : "-",
         flags.HasFlag(NetworkReachabilityFlags.Reachable) ?               "R" : "-",
                                                                           " ",
         flags.HasFlag(NetworkReachabilityFlags.ConnectionRequired) ?      "c" : "-",
         flags.HasFlag(NetworkReachabilityFlags.TransientConnection) ?     "t" : "-",
         flags.HasFlag(NetworkReachabilityFlags.InterventionRequired) ?    "i" : "-",
         flags.HasFlag(NetworkReachabilityFlags.ConnectionOnTraffic) ?     "C" : "-",
         flags.HasFlag(NetworkReachabilityFlags.ConnectionOnDemand) ?      "D" : "-",
         flags.HasFlag(NetworkReachabilityFlags.IsLocalAddress) ?          "l" : "-",
         flags.HasFlag(NetworkReachabilityFlags.IsDirect) ?                "d" : "-"
         );
 }
コード例 #13
0
        private bool ReachableViaWiFi(NetworkReachabilityFlags flags)
        {
            if (!flags.HasFlag(NetworkReachabilityFlags.Reachable))
                return false;

            // If we don't have WWAN, reachable = WiFi (close enough)
            if (!HasWWAN)
                return true;

            // We have WWAN, if we're connecting through WWAN, we're not connecting through WiFi
            if (flags.HasFlag(NetworkReachabilityFlags.IsWWAN))
                return false;
            else
                return true; // Connecting through WiFi, not WWAN
        }
コード例 #14
0
        private bool ReachableViaWWAN(NetworkReachabilityFlags flags)
        {
            if (!HasWWAN)
                return false;

            return (flags.HasFlag(NetworkReachabilityFlags.Reachable) && flags.HasFlag(NetworkReachabilityFlags.IsWWAN));
        }
コード例 #15
0
        /// <summary>
        /// Get whether the requested resource is reachable with the specified flags
        /// </summary>
        /// <returns>
        /// <c>true</c> if the requested resource is reachable with the specified flags; otherwise, <c>false</c>.
        /// </returns>
        /// <param name='flags'>
        /// Reachability flags.
        /// </param>
        /// <remarks>
        /// This is for the case where you flick the airplane mode you end up getting something like this:
        /// Reachability: WR ct-----
        /// Reachability: -- -------
        /// Reachability: WR ct-----
        /// Reachability: -- -------
        /// We treat this as 4 UNREACHABLE triggers - really Apple should do better than this
        /// </remarks>
        private bool IsReachableWithFlags(NetworkReachabilityFlags flags)
        {
            if (!flags.HasFlag(NetworkReachabilityFlags.Reachable))
                return false;

            var testCase = NetworkReachabilityFlags.ConnectionRequired | NetworkReachabilityFlags.TransientConnection;
            if ((flags & testCase) == testCase)
                return false;

            if (HasWWAN)
            {
                // If we're connecting via WWAN, and WWAN doesn't count as connected, return false
                if (flags.HasFlag(NetworkReachabilityFlags.IsWWAN) && !AllowWWAN)
                    return false;
            }

            return true;
        }