浏览代码

remove timer from PlayToController

Luke Pulverenti 9 年之前
父节点
当前提交
24b925cb56
共有 1 个文件被更改,包括 18 次插入31 次删除
  1. 18 31
      MediaBrowser.Dlna/PlayTo/PlayToController.cs

+ 18 - 31
MediaBrowser.Dlna/PlayTo/PlayToController.cs

@@ -37,11 +37,28 @@ namespace MediaBrowser.Dlna.PlayTo
         private readonly IDeviceDiscovery _deviceDiscovery;
         private readonly IDeviceDiscovery _deviceDiscovery;
         private readonly string _serverAddress;
         private readonly string _serverAddress;
         private readonly string _accessToken;
         private readonly string _accessToken;
+        private readonly DateTime _creationTime;
 
 
         public bool IsSessionActive
         public bool IsSessionActive
         {
         {
             get
             get
             {
             {
+                var lastDateKnownActivity = new[] { _creationTime, _device.DateLastActivity }.Max();
+
+                if (DateTime.UtcNow >= lastDateKnownActivity.AddSeconds(120))
+                {
+                    try
+                    {
+                        // Session is inactive, mark it for Disposal and don't start the elapsed timer.
+                        _sessionManager.ReportSessionEnded(_session.Id);
+                    }
+                    catch (Exception ex)
+                    {
+                        _logger.ErrorException("Error in ReportSessionEnded", ex);
+                    }
+                    return false;
+                }
+
                 return _device != null;
                 return _device != null;
             }
             }
         }
         }
@@ -55,8 +72,6 @@ namespace MediaBrowser.Dlna.PlayTo
             get { return IsSessionActive; }
             get { return IsSessionActive; }
         }
         }
 
 
-        private Timer _updateTimer;
-
         public PlayToController(SessionInfo session, ISessionManager sessionManager, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, IDeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization, IMediaSourceManager mediaSourceManager)
         public PlayToController(SessionInfo session, ISessionManager sessionManager, ILibraryManager libraryManager, ILogger logger, IDlnaManager dlnaManager, IUserManager userManager, IImageProcessor imageProcessor, string serverAddress, string accessToken, IDeviceDiscovery deviceDiscovery, IUserDataManager userDataManager, ILocalizationManager localization, IMediaSourceManager mediaSourceManager)
         {
         {
             _session = session;
             _session = session;
@@ -72,6 +87,7 @@ namespace MediaBrowser.Dlna.PlayTo
             _mediaSourceManager = mediaSourceManager;
             _mediaSourceManager = mediaSourceManager;
             _accessToken = accessToken;
             _accessToken = accessToken;
             _logger = logger;
             _logger = logger;
+            _creationTime = DateTime.UtcNow;
         }
         }
 
 
         public void Init(Device device)
         public void Init(Device device)
@@ -84,8 +100,6 @@ namespace MediaBrowser.Dlna.PlayTo
             _device.Start();
             _device.Start();
 
 
             _deviceDiscovery.DeviceLeft += _deviceDiscovery_DeviceLeft;
             _deviceDiscovery.DeviceLeft += _deviceDiscovery_DeviceLeft;
-
-            _updateTimer = new Timer(updateTimer_Elapsed, null, 60000, 60000);
         }
         }
 
 
         void _deviceDiscovery_DeviceLeft(object sender, SsdpMessageEventArgs e)
         void _deviceDiscovery_DeviceLeft(object sender, SsdpMessageEventArgs e)
@@ -117,22 +131,6 @@ namespace MediaBrowser.Dlna.PlayTo
             }
             }
         }
         }
 
 
-        private void updateTimer_Elapsed(object state)
-        {
-            if (DateTime.UtcNow >= _device.DateLastActivity.AddSeconds(120))
-            {
-                try
-                {
-                    // Session is inactive, mark it for Disposal and don't start the elapsed timer.
-                    _sessionManager.ReportSessionEnded(_session.Id);
-                }
-                catch (Exception ex)
-                {
-                    _logger.ErrorException("Error in ReportSessionEnded", ex);
-                }
-            }
-        }
-
         async void _device_MediaChanged(object sender, MediaChangedEventArgs e)
         async void _device_MediaChanged(object sender, MediaChangedEventArgs e)
         {
         {
             try
             try
@@ -634,21 +632,10 @@ namespace MediaBrowser.Dlna.PlayTo
                 _device.MediaChanged -= _device_MediaChanged;
                 _device.MediaChanged -= _device_MediaChanged;
                 _deviceDiscovery.DeviceLeft -= _deviceDiscovery_DeviceLeft;
                 _deviceDiscovery.DeviceLeft -= _deviceDiscovery_DeviceLeft;
 
 
-                DisposeUpdateTimer();
-
                 _device.Dispose();
                 _device.Dispose();
             }
             }
         }
         }
 
 
-        private void DisposeUpdateTimer()
-        {
-            if (_updateTimer != null)
-            {
-                _updateTimer.Dispose();
-                _updateTimer = null;
-            }
-        }
-
         private readonly CultureInfo _usCulture = new CultureInfo("en-US");
         private readonly CultureInfo _usCulture = new CultureInfo("en-US");
 
 
         public Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)
         public Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)