async Task <MqttPublishPacket> InvokeClientMessageQueueInterceptor(MqttPublishPacket publishPacket, MqttQueuedApplicationMessage queuedApplicationMessage) { if (_serverOptions.ClientMessageQueueInterceptor == null) { return(publishPacket); } var context = new MqttClientMessageQueueInterceptorContext { SenderClientId = queuedApplicationMessage.SenderClientId, ReceiverClientId = ClientId, ApplicationMessage = queuedApplicationMessage.ApplicationMessage, SubscriptionQualityOfServiceLevel = queuedApplicationMessage.SubscriptionQualityOfServiceLevel }; if (_serverOptions.ClientMessageQueueInterceptor != null) { await _serverOptions.ClientMessageQueueInterceptor.InterceptClientMessageQueueEnqueueAsync(context).ConfigureAwait(false); } if (!context.AcceptEnqueue || context.ApplicationMessage == null) { return(null); } publishPacket.Topic = context.ApplicationMessage.Topic; publishPacket.Payload = context.ApplicationMessage.Payload; publishPacket.QualityOfServiceLevel = context.SubscriptionQualityOfServiceLevel; return(publishPacket); }
public void EnqueueApplicationMessage(MqttClientSession senderClientSession, MqttPublishPacket publishPacket) { if (publishPacket == null) { throw new ArgumentNullException(nameof(publishPacket)); } var checkSubscriptionsResult = _subscriptionsManager.CheckSubscriptions(publishPacket.Topic, publishPacket.QualityOfServiceLevel); if (!checkSubscriptionsResult.IsSubscribed) { return; } publishPacket = new MqttPublishPacket { Topic = publishPacket.Topic, Payload = publishPacket.Payload, QualityOfServiceLevel = checkSubscriptionsResult.QualityOfServiceLevel, Retain = publishPacket.Retain, Dup = false }; if (publishPacket.QualityOfServiceLevel > 0) { publishPacket.PacketIdentifier = _packetIdentifierProvider.GetNewPacketIdentifier(); } if (_options.ClientMessageQueueInterceptor != null) { var context = new MqttClientMessageQueueInterceptorContext( senderClientSession?.ClientId, ClientId, publishPacket.ToApplicationMessage()); _options.ClientMessageQueueInterceptor?.Invoke(context); if (!context.AcceptEnqueue || context.ApplicationMessage == null) { return; } publishPacket.Topic = context.ApplicationMessage.Topic; publishPacket.Payload = context.ApplicationMessage.Payload; publishPacket.QualityOfServiceLevel = context.ApplicationMessage.QualityOfServiceLevel; } _pendingPacketsQueue.Enqueue(publishPacket); }
public Task InterceptClientMessageQueueEnqueueAsync(MqttClientMessageQueueInterceptorContext context) { throw new System.NotImplementedException(); }
public Task InterceptClientMessageQueueEnqueueAsync(MqttClientMessageQueueInterceptorContext context) { return(Task.FromResult(context.AcceptEnqueue)); }