Skip to content

Commit 026029c

Browse files
Anton SmolkovAntonSmolkov
Anton Smolkov
authored andcommitted
Use dedicated type for MattApplicationMessage injection result
1 parent ebbdd53 commit 026029c

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

Source/MQTTnet.Server/Status/MqttSessionStatus.cs

+17-10
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ public Task DeleteAsync()
4646
/// </summary>
4747
/// <param name="applicationMessage">The application message to deliver.</param>
4848
/// <returns>
49-
/// A task that represents the asynchronous operation. The result contains the delivered MQTT publish packet.
49+
/// A task that represents the asynchronous operation.
50+
/// The result contains the <see cref="InjectMqttApplicationMessageResult"/> that includes the packet identifier of the enqueued message.
5051
/// </returns>
51-
public async Task<MqttPacketWithIdentifier> DeliverApplicationMessageAsync(MqttApplicationMessage applicationMessage)
52+
public async Task<InjectMqttApplicationMessageResult> DeliverApplicationMessageAsync(MqttApplicationMessage applicationMessage)
5253
{
5354
ArgumentNullException.ThrowIfNull(applicationMessage);
5455

@@ -57,35 +58,41 @@ public async Task<MqttPacketWithIdentifier> DeliverApplicationMessageAsync(MqttA
5758

5859
var mqttPacket = await packetBusItem.WaitAsync();
5960

60-
return (MqttPacketWithIdentifier)mqttPacket;
61+
var result = new InjectMqttApplicationMessageResult()
62+
{
63+
PacketIdentifier = ((MqttPacketWithIdentifier)mqttPacket).PacketIdentifier
64+
};
65+
66+
return result;
6167
}
6268

6369
/// <summary>
6470
/// Attempts to enqueue an application message to the session's send buffer.
6571
/// </summary>
6672
/// <param name="applicationMessage">The application message to enqueue.</param>
67-
/// <param name="publishPacket">The corresponding MQTT publish packed, if the operation was successful.</param>
73+
/// <param name="injectResult"><see cref="InjectMqttApplicationMessageResult"/> that includes the packet identifier of the enqueued message.</param>
6874
/// <returns><c>true</c> if the message was successfully enqueued; otherwise, <c>false</c>.</returns>
6975
/// <remarks>
7076
/// When <see cref="MqttServerOptions.PendingMessagesOverflowStrategy"/> is set to <see cref="MqttPendingMessagesOverflowStrategy.DropOldestQueuedMessage"/>,
7177
/// this method always returns <c>true</c>.
7278
/// However, an existing message in the queue may be <b>dropped later</b> to make room for the newly enqueued message.
7379
/// Such dropped messages can be tracked by subscribing to <see cref="MqttServer.QueuedApplicationMessageOverwrittenAsync"/> event.
7480
/// </remarks>
75-
public bool TryEnqueueApplicationMessage(MqttApplicationMessage applicationMessage, out MqttPacketWithIdentifier publishPacket)
81+
public bool TryEnqueueApplicationMessage(MqttApplicationMessage applicationMessage, out InjectMqttApplicationMessageResult injectResult)
7682
{
7783
ArgumentNullException.ThrowIfNull(applicationMessage);
7884

79-
publishPacket = MqttPublishPacketFactory.Create(applicationMessage);
85+
var publishPacket = MqttPublishPacketFactory.Create(applicationMessage);
8086
var enqueueDataPacketResult = _session.EnqueueDataPacket(new MqttPacketBusItem(publishPacket));
8187

82-
if (enqueueDataPacketResult == EnqueueDataPacketResult.Enqueued)
88+
if (enqueueDataPacketResult != EnqueueDataPacketResult.Enqueued)
8389
{
84-
return true;
90+
injectResult = null;
91+
return false;
8592
}
8693

87-
publishPacket = null;
88-
return false;
94+
injectResult = new InjectMqttApplicationMessageResult() { PacketIdentifier = publishPacket.PacketIdentifier };
95+
return true;
8996
}
9097

9198
[Obsolete("This method is obsolete. Use TryEnqueueApplicationMessage instead.")]

Source/MQTTnet.Tests/Server/Injection_Tests.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ public async Task Enqueue_Application_Message_At_Session_Level()
3333
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
3434
.WithTopic("InjectedOne").Build();
3535

36-
var enqueued = clientStatus.TryEnqueueApplicationMessage(message, out var publishPacket);
36+
var enqueued = clientStatus.TryEnqueueApplicationMessage(message, out var injectResult);
3737

3838
Assert.IsTrue(enqueued);
3939

4040
await LongTestDelay();
4141

4242
Assert.AreEqual(1, messageReceivedHandler1.ReceivedEventArgs.Count);
43-
Assert.AreEqual(publishPacket.PacketIdentifier, messageReceivedHandler1.ReceivedEventArgs[0].PacketIdentifier);
43+
Assert.AreEqual(injectResult.PacketIdentifier, messageReceivedHandler1.ReceivedEventArgs[0].PacketIdentifier);
4444
Assert.AreEqual("InjectedOne", messageReceivedHandler1.ReceivedEventArgs[0].ApplicationMessage.Topic);
4545

4646
// The second receiver should NOT receive the message.
@@ -223,12 +223,12 @@ public async Task Deliver_Application_Message_At_Session_Level()
223223
.WithTopic("InjectedOne")
224224
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
225225
.Build();
226-
var publishPacket = await clientStatus.DeliverApplicationMessageAsync(mqttApplicationMessage);
226+
var injectResult = await clientStatus.DeliverApplicationMessageAsync(mqttApplicationMessage);
227227

228228
await LongTestDelay();
229229

230230
Assert.AreEqual(1, messageReceivedHandler1.ReceivedEventArgs.Count);
231-
Assert.AreEqual(publishPacket.PacketIdentifier, messageReceivedHandler1.ReceivedEventArgs[0].PacketIdentifier);
231+
Assert.AreEqual(injectResult.PacketIdentifier, messageReceivedHandler1.ReceivedEventArgs[0].PacketIdentifier);
232232
Assert.AreEqual("InjectedOne", messageReceivedHandler1.ReceivedEventArgs[0].ApplicationMessage.Topic);
233233

234234
// The second receiver should NOT receive the message.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
namespace MQTTnet;
6+
7+
public class InjectMqttApplicationMessageResult
8+
{
9+
public ushort PacketIdentifier { get; init; }
10+
}

0 commit comments

Comments
 (0)