/// <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); }
private bool ReachableViaWWAN(NetworkReachabilityFlags flags) { if (!HasWWAN) { return(false); } return(flags.HasFlag(NetworkReachabilityFlags.Reachable) && flags.HasFlag(NetworkReachabilityFlags.IsWWAN)); }
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 (); }
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)); } }
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(); }
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; } }
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)); } }
/// <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" : "-" )); }
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 } }
private void ReachablilityCallback(NetworkReachabilityFlags flags) { var connected = flags.HasFlag(NetworkReachabilityFlags.Reachable); if (connected) { GetNetworkSetup(flags); } else { ConnectionState = NetworkConnectionStates.None; } OnConnectivityChanged?.Invoke(this, new EventArgs()); }
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()); }
/// <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" : "-" ); }
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 }
private bool ReachableViaWWAN(NetworkReachabilityFlags flags) { if (!HasWWAN) return false; return (flags.HasFlag(NetworkReachabilityFlags.Reachable) && flags.HasFlag(NetworkReachabilityFlags.IsWWAN)); }
/// <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; }