@ -11,15 +11,12 @@ using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO ;
using MediaBrowser.Model.IO ;
using MediaBrowser.Model.Logging ;
using MediaBrowser.Model.Logging ;
using MediaBrowser.Model.Net ;
using MediaBrowser.Model.Net ;
using System.Threading ;
namespace Emby.Server.Implementations.Networking
namespace Emby.Server.Implementations.Networking
{
{
public class NetworkManager : INetworkManager
public class NetworkManager : INetworkManager
{
{
protected ILogger Logger { get ; private set ; }
protected ILogger Logger { get ; private set ; }
private DateTime _lastRefresh ;
private int NetworkCacheMinutes = 720 ;
public event EventHandler NetworkChanged ;
public event EventHandler NetworkChanged ;
@ -33,7 +30,6 @@ namespace Emby.Server.Implementations.Networking
}
}
catch ( Exception ex )
catch ( Exception ex )
{
{
NetworkCacheMinutes = 15 ;
Logger . ErrorException ( "Error binding to NetworkAddressChanged event" , ex ) ;
Logger . ErrorException ( "Error binding to NetworkAddressChanged event" , ex ) ;
}
}
@ -43,7 +39,6 @@ namespace Emby.Server.Implementations.Networking
}
}
catch ( Exception ex )
catch ( Exception ex )
{
{
NetworkCacheMinutes = 15 ;
Logger . ErrorException ( "Error binding to NetworkChange_NetworkAvailabilityChanged event" , ex ) ;
Logger . ErrorException ( "Error binding to NetworkChange_NetworkAvailabilityChanged event" , ex ) ;
}
}
}
}
@ -51,19 +46,21 @@ namespace Emby.Server.Implementations.Networking
private void NetworkChange_NetworkAvailabilityChanged ( object sender , NetworkAvailabilityEventArgs e )
private void NetworkChange_NetworkAvailabilityChanged ( object sender , NetworkAvailabilityEventArgs e )
{
{
Logger . Debug ( "NetworkAvailabilityChanged" ) ;
Logger . Debug ( "NetworkAvailabilityChanged" ) ;
_lastRefresh = DateTime . MinValue ;
OnNetworkChanged ( ) ;
OnNetworkChanged ( ) ;
}
}
private void NetworkChange_NetworkAddressChanged ( object sender , EventArgs e )
private void NetworkChange_NetworkAddressChanged ( object sender , EventArgs e )
{
{
Logger . Debug ( "NetworkAddressChanged" ) ;
Logger . Debug ( "NetworkAddressChanged" ) ;
_lastRefresh = DateTime . MinValue ;
OnNetworkChanged ( ) ;
OnNetworkChanged ( ) ;
}
}
private void OnNetworkChanged ( )
private void OnNetworkChanged ( )
{
{
lock ( _localIpAddressSyncLock )
{
_localIpAddresses = null ;
}
if ( NetworkChanged ! = null )
if ( NetworkChanged ! = null )
{
{
NetworkChanged ( this , EventArgs . Empty ) ;
NetworkChanged ( this , EventArgs . Empty ) ;
@ -77,21 +74,17 @@ namespace Emby.Server.Implementations.Networking
{
{
lock ( _localIpAddressSyncLock )
lock ( _localIpAddressSyncLock )
{
{
var forceRefresh = ( DateTime . UtcNow - _lastRefresh ) . TotalMinutes > = NetworkCacheMinutes ;
if ( _localIpAddresses = = null )
if ( _localIpAddresses = = null | | forceRefresh )
{
{
var addresses = GetLocalIpAddressesInternal ( ) . Result . Select ( ToIpAddressInfo ) . ToList ( ) ;
var addresses = GetLocalIpAddressesInternal ( ) . Result . Select ( ToIpAddressInfo ) . ToList ( ) ;
_localIpAddresses = addresses ;
_localIpAddresses = addresses ;
_lastRefresh = DateTime . UtcNow ;
return addresses ;
return addresses ;
}
}
}
return _localIpAddresses ;
return _localIpAddresses ;
}
}
}
private async Task < List < IPAddress > > GetLocalIpAddressesInternal ( )
private async Task < List < IPAddress > > GetLocalIpAddressesInternal ( )
{
{