浏览代码

remove timer from PlayToController

Luke Pulverenti 9 年之前
父节点
当前提交
a39f263814
共有 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 string _serverAddress;
         private readonly string _accessToken;
+        private readonly DateTime _creationTime;
 
         public bool IsSessionActive
         {
             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;
             }
         }
@@ -55,8 +72,6 @@ namespace MediaBrowser.Dlna.PlayTo
             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)
         {
             _session = session;
@@ -72,6 +87,7 @@ namespace MediaBrowser.Dlna.PlayTo
             _mediaSourceManager = mediaSourceManager;
             _accessToken = accessToken;
             _logger = logger;
+            _creationTime = DateTime.UtcNow;
         }
 
         public void Init(Device device)
@@ -84,8 +100,6 @@ namespace MediaBrowser.Dlna.PlayTo
             _device.Start();
 
             _deviceDiscovery.DeviceLeft += _deviceDiscovery_DeviceLeft;
-
-            _updateTimer = new Timer(updateTimer_Elapsed, null, 60000, 60000);
         }
 
         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)
         {
             try
@@ -634,21 +632,10 @@ namespace MediaBrowser.Dlna.PlayTo
                 _device.MediaChanged -= _device_MediaChanged;
                 _deviceDiscovery.DeviceLeft -= _deviceDiscovery_DeviceLeft;
 
-                DisposeUpdateTimer();
-
                 _device.Dispose();
             }
         }
 
-        private void DisposeUpdateTimer()
-        {
-            if (_updateTimer != null)
-            {
-                _updateTimer.Dispose();
-                _updateTimer = null;
-            }
-        }
-
         private readonly CultureInfo _usCulture = new CultureInfo("en-US");
 
         public Task SendGeneralCommand(GeneralCommand command, CancellationToken cancellationToken)