aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-24 14:03:55 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-01-24 14:03:55 -0500
commitee00f8bf726ae5498d64cff0086b9b7e638936ea (patch)
tree710a5b4b715e5fbf1574bc072c4f299e7c9826ff /MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
parent1af651bc56025935cebe2762d6f36be41530eba1 (diff)
added HasSyncJob
Diffstat (limited to 'MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs')
-rw-r--r--MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
index bf6ebf7ef..660ac09f9 100644
--- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
+++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
@@ -18,12 +18,65 @@ namespace MediaBrowser.Common.Implementations.Networking
Logger = logger;
}
+ private volatile List<string> _localIpAddresses;
+ private readonly object _localIpAddressSyncLock = new object();
+
/// <summary>
/// Gets the machine's local ip address
/// </summary>
/// <returns>IPAddress.</returns>
public IEnumerable<string> GetLocalIpAddresses()
{
+ if (_localIpAddresses == null)
+ {
+ lock (_localIpAddressSyncLock)
+ {
+ if (_localIpAddresses == null)
+ {
+ var addresses = GetLocalIpAddressesInternal().ToList();
+
+ _localIpAddresses = addresses;
+ BindEvents();
+
+ return addresses;
+ }
+ }
+ }
+
+ return _localIpAddresses;
+ }
+
+ private void BindEvents()
+ {
+ NetworkChange.NetworkAddressChanged -= NetworkChange_NetworkAddressChanged;
+ NetworkChange.NetworkAvailabilityChanged -= NetworkChange_NetworkAvailabilityChanged;
+
+ NetworkChange.NetworkAddressChanged += NetworkChange_NetworkAddressChanged;
+ NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAvailabilityChanged;
+ }
+
+ void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
+ {
+ Logger.Debug("NetworkAvailabilityChanged fired. Resetting cached network info.");
+
+ lock (_localIpAddressSyncLock)
+ {
+ _localIpAddresses = null;
+ }
+ }
+
+ void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
+ {
+ Logger.Debug("NetworkAddressChanged fired. Resetting cached network info.");
+
+ lock (_localIpAddressSyncLock)
+ {
+ _localIpAddresses = null;
+ }
+ }
+
+ private IEnumerable<string> GetLocalIpAddressesInternal()
+ {
var list = GetIPsDefault()
.Where(i => !IPAddress.IsLoopback(i))
.Select(i => i.ToString())