mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-27 08:42:37 +08:00
@@ -249,21 +249,25 @@ namespace MQTTnet.Core.Client
|
|||||||
if (mqttPacket is MqttPingReqPacket)
|
if (mqttPacket is MqttPingReqPacket)
|
||||||
{
|
{
|
||||||
await SendAsync(new MqttPingRespPacket());
|
await SendAsync(new MqttPingRespPacket());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mqttPacket is MqttDisconnectPacket)
|
if (mqttPacket is MqttDisconnectPacket)
|
||||||
{
|
{
|
||||||
await DisconnectAsync();
|
await DisconnectAsync();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mqttPacket is MqttPublishPacket publishPacket)
|
if (mqttPacket is MqttPublishPacket publishPacket)
|
||||||
{
|
{
|
||||||
await ProcessReceivedPublishPacket(publishPacket);
|
await ProcessReceivedPublishPacket(publishPacket);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mqttPacket is MqttPubRelPacket pubRelPacket)
|
if (mqttPacket is MqttPubRelPacket pubRelPacket)
|
||||||
{
|
{
|
||||||
await ProcessReceivedPubRelPacket(pubRelPacket);
|
await ProcessReceivedPubRelPacket(pubRelPacket);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_packetDispatcher.Dispatch(mqttPacket);
|
_packetDispatcher.Dispatch(mqttPacket);
|
||||||
@@ -336,8 +340,9 @@ namespace MQTTnet.Core.Client
|
|||||||
|
|
||||||
private async Task<TResponsePacket> SendAndReceiveAsync<TResponsePacket>(MqttBasePacket requestPacket) where TResponsePacket : MqttBasePacket
|
private async Task<TResponsePacket> SendAndReceiveAsync<TResponsePacket>(MqttBasePacket requestPacket) where TResponsePacket : MqttBasePacket
|
||||||
{
|
{
|
||||||
|
var wait = _packetDispatcher.WaitForPacketAsync(requestPacket, typeof(TResponsePacket), _options.DefaultCommunicationTimeout);
|
||||||
await _adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, requestPacket).ConfigureAwait(false);
|
await _adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, requestPacket).ConfigureAwait(false);
|
||||||
return (TResponsePacket)await _packetDispatcher.WaitForPacketAsync(requestPacket, typeof(TResponsePacket), _options.DefaultCommunicationTimeout).ConfigureAwait(false);
|
return (TResponsePacket)await wait.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ushort GetNewPacketIdentifier()
|
private ushort GetNewPacketIdentifier()
|
||||||
|
|||||||
@@ -54,6 +54,12 @@ namespace MQTTnet.Core.Server
|
|||||||
var consumable = _pendingPublishPackets.GetConsumingEnumerable();
|
var consumable = _pendingPublishPackets.GetConsumingEnumerable();
|
||||||
while (!cancellationToken.IsCancellationRequested)
|
while (!cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
|
if (_pendingPublishPackets.Count == 0)
|
||||||
|
{
|
||||||
|
await Task.Delay(TimeSpan.FromMilliseconds(5)).ConfigureAwait(false);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
var packets = consumable.Take(_pendingPublishPackets.Count).ToList();
|
var packets = consumable.Take(_pendingPublishPackets.Count).ToList();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user