mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-18 02:13:00 +08:00
Server refactoring
This commit is contained in:
@@ -9,6 +9,7 @@ using MQTTnet.Core.Packets;
|
||||
using MQTTnet.Core.Protocol;
|
||||
using MQTTnet.Core.Serializer;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace MQTTnet.Core.Server
|
||||
{
|
||||
@@ -16,8 +17,8 @@ namespace MQTTnet.Core.Server
|
||||
{
|
||||
private readonly HashSet<ushort> _unacknowledgedPublishPackets = new HashSet<ushort>();
|
||||
|
||||
private readonly MqttClientSubscriptionsManager _subscriptionsManager = new MqttClientSubscriptionsManager();
|
||||
private readonly MqttClientSessionsManager _mqttClientSessionsManager;
|
||||
private readonly MqttClientSubscriptionsManager _subscriptionsManager;
|
||||
private readonly MqttClientSessionsManager _sessionsManager;
|
||||
private readonly MqttClientPendingMessagesQueue _pendingMessagesQueue;
|
||||
private readonly MqttServerOptions _options;
|
||||
private readonly ILogger<MqttClientSession> _logger;
|
||||
@@ -26,14 +27,22 @@ namespace MQTTnet.Core.Server
|
||||
private CancellationTokenSource _cancellationTokenSource;
|
||||
private MqttApplicationMessage _willMessage;
|
||||
|
||||
public MqttClientSession(string clientId, MqttClientSessionsManager mqttClientSessionsManager, ILogger<MqttClientSession> logger, ILogger<MqttClientPendingMessagesQueue> msgQueueLogger)
|
||||
public MqttClientSession(
|
||||
string clientId,
|
||||
IOptions<MqttServerOptions> options,
|
||||
MqttClientSessionsManager sessionsManager,
|
||||
MqttClientSubscriptionsManager subscriptionsManager,
|
||||
ILogger<MqttClientSession> logger,
|
||||
ILogger<MqttClientPendingMessagesQueue> messageQueueLogger)
|
||||
{
|
||||
_mqttClientSessionsManager = mqttClientSessionsManager ?? throw new ArgumentNullException(nameof(mqttClientSessionsManager));
|
||||
_sessionsManager = sessionsManager ?? throw new ArgumentNullException(nameof(sessionsManager));
|
||||
_subscriptionsManager = subscriptionsManager ?? throw new ArgumentNullException(nameof(sessionsManager));
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
|
||||
ClientId = clientId;
|
||||
|
||||
_options = mqttClientSessionsManager.Options;
|
||||
_pendingMessagesQueue = new MqttClientPendingMessagesQueue(mqttClientSessionsManager.Options, this, msgQueueLogger);
|
||||
_options = options.Value;
|
||||
_pendingMessagesQueue = new MqttClientPendingMessagesQueue(_options, this, messageQueueLogger);
|
||||
}
|
||||
|
||||
public string ClientId { get; }
|
||||
@@ -84,7 +93,7 @@ namespace MQTTnet.Core.Server
|
||||
{
|
||||
if (_willMessage != null)
|
||||
{
|
||||
_mqttClientSessionsManager.DispatchApplicationMessage(this, _willMessage);
|
||||
_sessionsManager.DispatchApplicationMessage(this, _willMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -177,7 +186,7 @@ namespace MQTTnet.Core.Server
|
||||
|
||||
private void EnqueueRetainedMessages(MqttSubscribePacket subscribePacket)
|
||||
{
|
||||
var retainedMessages = _mqttClientSessionsManager.RetainedMessagesManager.GetMessages(subscribePacket);
|
||||
var retainedMessages = _sessionsManager.RetainedMessagesManager.GetMessages(subscribePacket);
|
||||
foreach (var publishPacket in retainedMessages)
|
||||
{
|
||||
EnqueuePublishPacket(publishPacket.ToPublishPacket());
|
||||
@@ -191,19 +200,19 @@ namespace MQTTnet.Core.Server
|
||||
|
||||
if (applicationMessage.Retain)
|
||||
{
|
||||
await _mqttClientSessionsManager.RetainedMessagesManager.HandleMessageAsync(ClientId, applicationMessage);
|
||||
await _sessionsManager.RetainedMessagesManager.HandleMessageAsync(ClientId, applicationMessage);
|
||||
}
|
||||
|
||||
switch (applicationMessage.QualityOfServiceLevel)
|
||||
{
|
||||
case MqttQualityOfServiceLevel.AtMostOnce:
|
||||
{
|
||||
_mqttClientSessionsManager.DispatchApplicationMessage(this, applicationMessage);
|
||||
_sessionsManager.DispatchApplicationMessage(this, applicationMessage);
|
||||
return;
|
||||
}
|
||||
case MqttQualityOfServiceLevel.AtLeastOnce:
|
||||
{
|
||||
_mqttClientSessionsManager.DispatchApplicationMessage(this, applicationMessage);
|
||||
_sessionsManager.DispatchApplicationMessage(this, applicationMessage);
|
||||
|
||||
await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token,
|
||||
new MqttPubAckPacket { PacketIdentifier = publishPacket.PacketIdentifier });
|
||||
@@ -218,7 +227,7 @@ namespace MQTTnet.Core.Server
|
||||
_unacknowledgedPublishPackets.Add(publishPacket.PacketIdentifier);
|
||||
}
|
||||
|
||||
_mqttClientSessionsManager.DispatchApplicationMessage(this, applicationMessage);
|
||||
_sessionsManager.DispatchApplicationMessage(this, applicationMessage);
|
||||
|
||||
await adapter.SendPacketsAsync(_options.DefaultCommunicationTimeout, _cancellationTokenSource.Token,
|
||||
new MqttPubRecPacket { PacketIdentifier = publishPacket.PacketIdentifier });
|
||||
|
||||
Reference in New Issue
Block a user