|
|
|
@ -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();
|
|
|
|
|