// 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 MQTTnet.Internal; namespace MQTTnet.Server.Internal; public class MqttServerEventContainer { public AsyncEvent ApplicationMessageNotConsumedEvent { get; } = new(); public AsyncEvent ClientAcknowledgedPublishPacketEvent { get; } = new(); public AsyncEvent ClientConnectedEvent { get; } = new(); public AsyncEvent ClientDisconnectedEvent { get; } = new(); public AsyncEvent ClientSubscribedTopicEvent { get; } = new(); public AsyncEvent ClientUnsubscribedTopicEvent { get; } = new(); public AsyncEvent InterceptingClientEnqueueEvent { get; } = new(); public AsyncEvent ApplicationMessageEnqueuedOrDroppedEvent { get; } = new(); public AsyncEvent QueuedApplicationMessageOverwrittenEvent { get; } = new(); public AsyncEvent InterceptingInboundPacketEvent { get; } = new(); public AsyncEvent InterceptingOutboundPacketEvent { get; } = new(); public AsyncEvent InterceptingPublishEvent { get; } = new(); public AsyncEvent InterceptingSubscriptionEvent { get; } = new(); public AsyncEvent InterceptingUnsubscriptionEvent { get; } = new(); public AsyncEvent LoadingRetainedMessagesEvent { get; } = new(); public AsyncEvent PreparingSessionEvent { get; } = new(); public AsyncEvent RetainedMessageChangedEvent { get; } = new(); public AsyncEvent RetainedMessagesClearedEvent { get; } = new(); public AsyncEvent SessionDeletedEvent { get; } = new(); public AsyncEvent StartedEvent { get; } = new(); public AsyncEvent StoppedEvent { get; } = new(); public AsyncEvent ValidatingConnectionEvent { get; } = new(); public async Task ShouldSkipEnqueue(string senderClientId, string clientId, MqttApplicationMessage applicationMessage) { if (!InterceptingClientEnqueueEvent.HasHandlers) { return false; } var eventArgs = new InterceptingClientApplicationMessageEnqueueEventArgs(senderClientId, clientId, applicationMessage); await InterceptingClientEnqueueEvent.InvokeAsync(eventArgs).ConfigureAwait(false); return !eventArgs.AcceptEnqueue; } }