Advertisement
FrayxRulez

Untitled

Nov 23rd, 2015
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. public class NetworkStatus : INetworkStatus
  2. {
  3. public NetworkStatus(IDispatcher dispatcher)
  4. {
  5. _dispatcher = dispatcher;
  6. _references = new List<DelegateReference>();
  7.  
  8. NetworkInformation.NetworkStatusChanged += OnNetworkAvailabilityChanged;
  9. InitializeConnection();
  10. }
  11.  
  12. public void AddHandler(NetworkStatusHandler handler)
  13. {
  14. lock (_referencesLock)
  15. {
  16. _references.Add(new DelegateReference(handler, false));
  17. PruneOldReferences();
  18. }
  19. }
  20.  
  21. private void CheckConnection()
  22. {
  23. bool connected = _connected;
  24. bool flag2;
  25.  
  26. {
  27. flag2 = NetworkInformation.GetInternetConnectionProfile()?.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess;
  28. _connected = flag2;
  29. }
  30.  
  31. if (connected != flag2)
  32. {
  33. Notify(flag2);
  34. }
  35. }
  36.  
  37. private void InitializeConnection()
  38. {
  39. CheckConnection();
  40. }
  41.  
  42. public bool IsConnected()
  43. {
  44. return _connected;
  45. }
  46.  
  47. private void Notify(bool connected)
  48. {
  49. lock (_references)
  50. {
  51. PruneOldReferences();
  52. using (List<DelegateReference>.Enumerator enumerator = _references.GetEnumerator())
  53. {
  54. while (enumerator.MoveNext())
  55. {
  56. DelegateReference current = enumerator.Current;
  57. NetworkStatusHandler target = current.Target as NetworkStatusHandler;
  58. if (target != null)
  59. {
  60. _dispatcher.RunAsync(delegate
  61. {
  62. target(this, connected);
  63. }, DispatcherPriority.Normal);
  64. }
  65. }
  66. }
  67. }
  68. }
  69.  
  70. private void OnNetworkAvailabilityChanged(object o)
  71. {
  72. CheckConnection();
  73. }
  74.  
  75. private void PruneOldReferences()
  76. {
  77. lock (_referencesLock)
  78. {
  79. _references.RemoveAll((DelegateReference d) => d.Target == null);
  80. }
  81. }
  82.  
  83. public void RemoveHandler(NetworkStatusHandler handler)
  84. {
  85. lock (_referencesLock)
  86. {
  87. _references.RemoveAll((DelegateReference d) => d.Target as NetworkStatusHandler == handler);
  88. PruneOldReferences();
  89. }
  90. }
  91.  
  92. public void ResetNetworkMap()
  93. {
  94. InitializeConnection();
  95. }
  96.  
  97. private bool _connected;
  98.  
  99. private readonly IDispatcher _dispatcher;
  100.  
  101. private readonly List<DelegateReference> _references;
  102.  
  103. private readonly object _referencesLock = new object();
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement