Improve session message injection (#2117)

* Improve session message injection methods

* Add more tests for session injection

* Change return type from MqttPublishPacket to MqttPacketWithIdentifier

* Use dedicated type for MattApplicationMessage injection result

* Code review minor fixes

* Apply project code style

* Update release notes

---------

Co-authored-by: Anton Smolkov <anton.smolkov@idp.zyfra.com>
Co-authored-by: christian <6939810+chkr1011@users.noreply.github.com>
This commit is contained in:
Anton Smolkov
2025-01-02 11:51:46 +01:00
committed by GitHub
co-authored by Anton Smolkov christian
parent e7de2b913a
commit 27771f0146
11 changed files with 522 additions and 70 deletions
@@ -0,0 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
namespace MQTTnet;
public class InjectMqttApplicationMessageResult
{
public ushort PacketIdentifier { get; init; }
}
-8
View File
@@ -141,14 +141,6 @@ namespace MQTTnet.Internal
}
}
public int ItemsCount(MqttPacketBusPartition partition)
{
lock (_syncRoot)
{
return _partitions[(int)partition].Count;
}
}
public int PartitionItemsCount(MqttPacketBusPartition partition)
{
lock (_syncRoot)
+4 -4
View File
@@ -10,8 +10,8 @@ namespace MQTTnet.Internal
{
public sealed class MqttPacketBusItem
{
readonly AsyncTaskCompletionSource<bool> _promise = new AsyncTaskCompletionSource<bool>();
readonly AsyncTaskCompletionSource<MqttPacket> _promise = new AsyncTaskCompletionSource<MqttPacket>();
public MqttPacketBusItem(MqttPacket packet)
{
Packet = packet ?? throw new ArgumentNullException(nameof(packet));
@@ -28,7 +28,7 @@ namespace MQTTnet.Internal
public void Complete()
{
_promise.TrySetResult(true);
_promise.TrySetResult(Packet);
Completed?.Invoke(this, EventArgs.Empty);
}
@@ -37,7 +37,7 @@ namespace MQTTnet.Internal
_promise.TrySetException(exception);
}
public Task WaitAsync()
public Task<MqttPacket> WaitAsync()
{
return _promise.Task;
}