Ver a proveniência

Fix wrong keep alive delay calculation.

release/3.x.x
Christian Kratky há 4 anos
ascendente
cometimento
08c9ecb011
2 ficheiros alterados com 8 adições e 4 eliminações
  1. +3
    -3
      Source/MQTTnet/Adapter/MqttChannelAdapter.cs
  2. +5
    -1
      Source/MQTTnet/Client/MqttClient.cs

+ 3
- 3
Source/MQTTnet/Adapter/MqttChannelAdapter.cs Ver ficheiro

@@ -25,7 +25,7 @@ namespace MQTTnet.Adapter

readonly byte[] _fixedHeaderBuffer = new byte[2];

SemaphoreSlim _writerSemaphore = new SemaphoreSlim(1, 1);
readonly SemaphoreSlim _writerSemaphore = new SemaphoreSlim(1, 1);

long _bytesReceived;
long _bytesSent;
@@ -111,6 +111,8 @@ namespace MQTTnet.Adapter

public async Task SendPacketAsync(MqttBasePacket packet, TimeSpan timeout, CancellationToken cancellationToken)
{
ThrowIfDisposed();

await _writerSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);
try
{
@@ -211,9 +213,7 @@ namespace MQTTnet.Adapter
if (disposing)
{
_channel?.Dispose();

_writerSemaphore?.Dispose();
_writerSemaphore = null;
}

base.Dispose(disposing);


+ 5
- 1
Source/MQTTnet/Client/MqttClient.cs Ver ficheiro

@@ -446,7 +446,11 @@ namespace MQTTnet.Client
await SendAndReceiveAsync<MqttPingRespPacket>(new MqttPingReqPacket(), cancellationToken).ConfigureAwait(false);
}

await Task.Delay(keepAlivePeriod, cancellationToken).ConfigureAwait(false);
// Wait a fixed time in all cases. Calculation of the remaining time is complicated
// due to some edge cases and was buggy in the past. Now we wait half a second because the
// min keep alive value is one second so that the server will wait 1.5 seconds for a PING
// packet.
await Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken).ConfigureAwait(false);
}
}
catch (Exception exception)


Carregando…
Cancelar
Guardar