mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-21 04:03:05 +08:00
Refactoring.
This commit is contained in:
@@ -128,11 +128,11 @@ namespace MQTTnet.Adapter
|
|||||||
|
|
||||||
if (timeout > TimeSpan.Zero)
|
if (timeout > TimeSpan.Zero)
|
||||||
{
|
{
|
||||||
receivedMqttPacket = await Internal.TaskExtensions.TimeoutAfterAsync(ct => ReceiveAsync(_channel, ct), timeout, cancellationToken).ConfigureAwait(false);
|
receivedMqttPacket = await Internal.TaskExtensions.TimeoutAfterAsync(ReceiveAsync, timeout, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
receivedMqttPacket = await ReceiveAsync(_channel, cancellationToken).ConfigureAwait(false);
|
receivedMqttPacket = await ReceiveAsync(cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receivedMqttPacket == null || cancellationToken.IsCancellationRequested)
|
if (receivedMqttPacket == null || cancellationToken.IsCancellationRequested)
|
||||||
@@ -163,9 +163,9 @@ namespace MQTTnet.Adapter
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ReceivedMqttPacket> ReceiveAsync(IMqttChannel channel, CancellationToken cancellationToken)
|
private async Task<ReceivedMqttPacket> ReceiveAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var fixedHeader = await MqttPacketReader.ReadFixedHeaderAsync(channel, _fixedHeaderBuffer, _singleByteBuffer, cancellationToken).ConfigureAwait(false);
|
var fixedHeader = await MqttPacketReader.ReadFixedHeaderAsync(_channel, _fixedHeaderBuffer, _singleByteBuffer, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -189,19 +189,15 @@ namespace MQTTnet.Adapter
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if WINDOWS_UWP
|
#if WINDOWS_UWP
|
||||||
var readBytes = await channel.ReadAsync(body, bodyOffset, chunkSize, cancellationToken).ConfigureAwait(false);
|
var readBytes = await _channel.ReadAsync(body, bodyOffset, chunkSize, cancellationToken).ConfigureAwait(false);
|
||||||
#else
|
#else
|
||||||
// async/await is not used to avoid the overhead of context switches. We assume that the reamining data
|
// async/await is not used to avoid the overhead of context switches. We assume that the reamining data
|
||||||
// has been sent from the sender directly after the initial bytes.
|
// has been sent from the sender directly after the initial bytes.
|
||||||
var readBytes = channel.ReadAsync(body, bodyOffset, chunkSize, cancellationToken).ConfigureAwait(false).GetAwaiter().GetResult();
|
var readBytes = _channel.ReadAsync(body, bodyOffset, chunkSize, cancellationToken).ConfigureAwait(false).GetAwaiter().GetResult();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
ExceptionHelper.ThrowIfGracefulSocketClose(readBytes);
|
||||||
if (readBytes <= 0)
|
|
||||||
{
|
|
||||||
ExceptionHelper.ThrowGracefulSocketClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
bodyOffset += readBytes;
|
bodyOffset += readBytes;
|
||||||
} while (bodyOffset < body.Length);
|
} while (bodyOffset < body.Length);
|
||||||
|
|||||||
@@ -8,5 +8,13 @@ namespace MQTTnet.Internal
|
|||||||
{
|
{
|
||||||
throw new MqttCommunicationClosedGracefullyException();
|
throw new MqttCommunicationClosedGracefullyException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ThrowIfGracefulSocketClose(int readBytesCount)
|
||||||
|
{
|
||||||
|
if (readBytesCount <= 0)
|
||||||
|
{
|
||||||
|
throw new MqttCommunicationClosedGracefullyException();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ namespace MQTTnet.Serializer
|
|||||||
while (totalBytesRead < buffer.Length)
|
while (totalBytesRead < buffer.Length)
|
||||||
{
|
{
|
||||||
var bytesRead = await channel.ReadAsync(buffer, totalBytesRead, buffer.Length - totalBytesRead, cancellationToken).ConfigureAwait(false);
|
var bytesRead = await channel.ReadAsync(buffer, totalBytesRead, buffer.Length - totalBytesRead, cancellationToken).ConfigureAwait(false);
|
||||||
if (bytesRead <= 0)
|
|
||||||
{
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
ExceptionHelper.ThrowIfGracefulSocketClose(bytesRead);
|
||||||
ExceptionHelper.ThrowGracefulSocketClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
totalBytesRead += bytesRead;
|
totalBytesRead += bytesRead;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user