diff options
Diffstat (limited to 'MediaBrowser.Dlna/Ssdp/SsdpHandler.cs')
| -rw-r--r-- | MediaBrowser.Dlna/Ssdp/SsdpHandler.cs | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs index 105ecc650f..8ca16832da 100644 --- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs +++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs @@ -129,17 +129,27 @@ namespace MediaBrowser.Dlna.Ssdp int sendCount = 1) { var msg = new SsdpMessageBuilder().BuildMessage(header, values); + var queued = false; - var dgram = new Datagram(endpoint, localAddress, _logger, msg, sendCount, ignoreBindFailure); - - if (_messageQueue.Count == 0) + for (var i = 0; i < sendCount; i++) { - dgram.Send(); - return; + var dgram = new Datagram(endpoint, localAddress, _logger, msg, ignoreBindFailure); + + if (_messageQueue.Count == 0) + { + dgram.Send(); + } + else + { + _messageQueue.Enqueue(dgram); + queued = true; + } } - _messageQueue.Enqueue(dgram); - StartQueueTimer(); + if (queued) + { + StartQueueTimer(); + } } /// <summary> @@ -189,8 +199,8 @@ namespace MediaBrowser.Dlna.Ssdp values["ST"] = d.Type; values["USN"] = d.USN; - SendDatagram(header, values, endpoint, null, true); - SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0), true); + SendDatagram(header, values, endpoint, null, true, 1); + SendDatagram(header, values, endpoint, new IPEndPoint(d.Address, 0), true, 1); //SendDatagram(header, values, endpoint, null, true); if (_config.GetDlnaConfiguration().EnableDebugLogging) @@ -208,36 +218,21 @@ namespace MediaBrowser.Dlna.Ssdp { if (_queueTimer == null) { - _queueTimer = new Timer(QueueTimerCallback, null, 1000, Timeout.Infinite); + _queueTimer = new Timer(QueueTimerCallback, null, 500, Timeout.Infinite); } else { - _queueTimer.Change(1000, Timeout.Infinite); + _queueTimer.Change(500, Timeout.Infinite); } } } private void QueueTimerCallback(object state) { - while (_messageQueue.Count != 0) + Datagram msg; + while (_messageQueue.TryDequeue(out msg)) { - Datagram msg; - if (!_messageQueue.TryPeek(out msg)) - { - continue; - } - - if (msg != null && (!_isDisposed || msg.TotalSendCount > 1)) - { - msg.Send(); - if (msg.SendCount > msg.TotalSendCount) - { - _messageQueue.TryDequeue(out msg); - } - break; - } - - _messageQueue.TryDequeue(out msg); + msg.Send(); } _datagramPosted.Set(); |
