Ejemplo n.º 1
0
        async Task SendRetainedMessagesAsync(ClientSubscription subscription, IMqttChannel <IPacket> channel)
        {
            var retainedMessages = retainedRepository.GetAll()
                                   .Where(r => topicEvaluator.Matches(r.Topic, subscription.TopicFilter));

            if (retainedMessages != null)
            {
                foreach (var retainedMessage in retainedMessages)
                {
                    ushort?packetId = subscription.MaximumQualityOfService == MqttQualityOfService.AtMostOnce ?
                                      null : (ushort?)packetIdProvider.GetPacketId();
                    var publish = new Publish(retainedMessage.Topic, subscription.MaximumQualityOfService,
                                              retain: true, duplicated: false, packetId: packetId)
                    {
                        Payload = retainedMessage.Payload
                    };

                    await senderFlow.SendPublishAsync(subscription.ClientId, publish, channel)
                    .ConfigureAwait(continueOnCapturedContext: false);
                }
            }
        }
Ejemplo n.º 2
0
        async Task SendRetainedMessagesAsync(ClientSubscription subscription, IMqttChannel <IPacket> channel)
        {
            IEnumerable <RetainedMessage> retainedMessages = _retainedRepository
                                                             .ReadAll()
                                                             .Where(r => _topicEvaluator.Matches(topicName: r.Id, topicFilter: subscription.TopicFilter));

            if (retainedMessages != null)
            {
                foreach (RetainedMessage retainedMessage in retainedMessages)
                {
                    ushort?packetId = subscription.MaximumQualityOfService == MqttQualityOfService.AtMostOnce ?
                                      null : (ushort?)_packetIdProvider.GetPacketId();
                    Publish publish = new Publish(topic: retainedMessage.Id,
                                                  qualityOfService: subscription.MaximumQualityOfService,
                                                  retain: true, duplicated: false, packetId: packetId)
                    {
                        Payload = retainedMessage.Payload
                    };

                    await _senderFlow.SendPublishAsync(subscription.ClientId, publish, channel);
                }
            }
        }