示例#1
0
        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);
                }
            }
        }
示例#2
0
 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);
         }
     }
 }