private async Task PublishMessages(IMqttSession session, Stream stream, IEnumerable <Tuple <string, QoS, byte[]> > messages, bool retained) { foreach (var message in messages) { string messageId = null; short? packetId = null; //QOS 1 or 2, store in storage, and in session. if (message.Item2 != QoS.BestEffort) { messageId = await storageProvider.StoreMessage(new InFlightMessage(message.Item1, message.Item3)); session.Publish(messageId, message.Item2); } else { //QoS 0 just publish, that way the session can keep a straight up queue and not block QoS 0 messages from //intervening. PublishMessage publishMessage = new PublishMessage(false, retained, message.Item2, message.Item1, message.Item3, packetId); await publishMessage.Write(stream); } } }
private void PublishMessages(IMqttSession session, IEnumerable <Tuple <string, MqttQos, byte[]> > messages, bool retained) { foreach (var message in messages) { string messageId = null; short? packetId = null; //QOS 1 or 2, store in storage, and in session. if (message.Item2 != MqttQos.BestEffort) { messageId = storageProvider.StoreMessage(new InFlightMessage(message.Item1, message.Item3)); session.Publish(messageId, message.Item2); } else { //QoS 0 just publish, that way the session can keep a straight up queue and not block QoS 0 messages from //intervening. MqttPublishMessage publishMessage = new MqttPublishMessage().WithQos(message.Item2).ToTopic(message.Item1).PublishData(message.Item3); publishMessage.Header.Retain = retained; publishMessage.Header.Duplicate = false; session.Write(publishMessage); } } }