Start migration of server to new packet bus.

This commit is contained in:
Christian
2021-10-22 22:44:06 +02:00
parent 3835deb3d1
commit 1677db286c
47 changed files with 771 additions and 656 deletions
@@ -1,11 +1,18 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MQTTnet.Client;
using MQTTnet.Internal;
using MQTTnet.Packets;
namespace MQTTnet.Server.Internal
{
public sealed class MqttClientSession
public sealed class MqttClientSession : IDisposable
{
readonly MqttPacketBus _packetBus = new MqttPacketBus();
readonly IMqttServerOptions _serverOptions;
readonly MqttClientSessionsManager _clientSessionsManager;
public MqttClientSession(string clientId,
@@ -15,18 +22,21 @@ namespace MQTTnet.Server.Internal
IMqttRetainedMessagesManager retainedMessagesManager,
MqttClientSessionsManager clientSessionsManager)
{
_serverOptions = serverOptions ?? throw new ArgumentNullException(nameof(serverOptions));
_clientSessionsManager = clientSessionsManager ?? throw new ArgumentNullException(nameof(clientSessionsManager));
ClientId = clientId ?? throw new ArgumentNullException(nameof(clientId));
Items = items ?? throw new ArgumentNullException(nameof(items));
SubscriptionsManager = new MqttClientSubscriptionsManager(this, serverOptions, eventDispatcher, retainedMessagesManager);
ApplicationMessagesQueue = new MqttClientSessionApplicationMessagesQueue(serverOptions);
//ApplicationMessagesQueue = new MqttClientSessionApplicationMessagesQueue(serverOptions);
}
public event EventHandler Deleted;
public string ClientId { get; }
public MqttPacketIdentifierProvider PacketIdentifierProvider { get; } = new MqttPacketIdentifierProvider();
public DateTime CreatedTimestamp { get; } = DateTime.UtcNow;
public bool IsCleanSession { get; set; } = true;
@@ -35,10 +45,39 @@ namespace MQTTnet.Server.Internal
public MqttClientSubscriptionsManager SubscriptionsManager { get; }
public MqttClientSessionApplicationMessagesQueue ApplicationMessagesQueue { get; }
//public MqttClientSessionApplicationMessagesQueue ApplicationMessagesQueue { get; }
public IDictionary<object, object> Items { get; }
public void EnqueuePacket(MqttPacketBusItem packet)
{
if (packet == null) throw new ArgumentNullException(nameof(packet));
if (_packetBus.PacketsCount >= _serverOptions.MaxPendingMessagesPerClient)
{
// TODO: Log!
return;
}
if (packet.Packet is MqttPublishPacket)
{
_packetBus.Enqueue(packet, MqttPacketBusPartition.Data);
}
else if (packet.Packet is MqttPingReqPacket || packet.Packet is MqttPingRespPacket)
{
_packetBus.Enqueue(packet, MqttPacketBusPartition.Health);
}
else
{
_packetBus.Enqueue(packet, MqttPacketBusPartition.Control);
}
}
public Task<MqttPacketBusItem> DequeuePacketAsync(CancellationToken cancellationToken)
{
return _packetBus.DequeueAsync(cancellationToken);
}
public Task DeleteAsync()
{
return _clientSessionsManager.DeleteSessionAsync(ClientId);
@@ -48,5 +87,10 @@ namespace MQTTnet.Server.Internal
{
Deleted?.Invoke(this, EventArgs.Empty);
}
public void Dispose()
{
_packetBus?.Dispose();
}
}
}