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); } } }
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); } } }