// 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. using System.Collections; using MQTTnet.Packets; namespace MQTTnet.Server; public sealed class InterceptingSubscriptionEventArgs : EventArgs { public InterceptingSubscriptionEventArgs( string clientId, string userName, MqttSessionStatus session, MqttTopicFilter topicFilter, List userProperties, CancellationToken cancellationToken) { CancellationToken = cancellationToken; ClientId = clientId; UserName = userName; Session = session; TopicFilter = topicFilter; UserProperties = userProperties; } /// /// Gets the cancellation token which can indicate that the client connection gets down. /// public CancellationToken CancellationToken { get; } /// /// Gets the client identifier. /// Hint: This identifier needs to be unique over all used clients / devices on the broker to avoid connection issues. /// public string ClientId { get; } /// /// Gets or sets whether the broker should close the client connection. /// public bool CloseConnection { get; set; } /// /// Gets or sets whether the broker should create an internal subscription for the client. /// The broker can also avoid this and return "success" to the client. /// This feature allows using the MQTT Broker as the Frontend and another system as the backend. /// public bool ProcessSubscription { get; set; } = true; /// /// Gets or sets the reason string which will be sent to the client in the SUBACK packet. /// public string ReasonString { get; set; } /// /// Gets the response which will be sent to the client via the SUBACK packet. /// public SubscribeResponse Response { get; } = new(); /// /// Gets the current client session. /// public MqttSessionStatus Session { get; } /// /// Gets or sets a key/value collection that can be used to share data within the scope of this session. /// public IDictionary SessionItems => Session.Items; /// /// Gets or sets the topic filter. /// The topic filter can contain topics and wildcards. /// public MqttTopicFilter TopicFilter { get; set; } /// /// Gets the user name of the client. /// public string UserName { get; } /// /// Gets or sets the user properties. /// MQTT 5.0.0+ feature. /// public List UserProperties { get; set; } }