예제 #1
0
        public async Task SendQosConfirmMsg(QualityOfService qos, MqttChannel mqttChannel, string topic, byte[] bytes)
        {
            if (mqttChannel.IsLogin())
            {
                int messageId = MessageIdGenerater.GenerateId();
                switch (qos)
                {
                case QualityOfService.AtLeastOnce:
                    mqttChannel.AddMqttMessage(messageId, await SendQos1Msg(mqttChannel.Channel, topic, false, bytes, messageId));
                    break;

                case QualityOfService.ExactlyOnce:
                    mqttChannel.AddMqttMessage(messageId, await SendQos2Msg(mqttChannel.Channel, topic, false, bytes, messageId));
                    break;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Sends the pub record.
        /// </summary>
        /// <param name="mqttChannel">The MQTT channel.</param>
        /// <param name="messageId">The message identifier.</param>
        public async Task SendPubRec(MqttChannel mqttChannel, int messageId)
        {
            var mqttPubAckMessage = new PubRecPacket
            {
                PacketId = messageId
            };
            var channel = mqttChannel.Channel;
            await channel.WriteAndFlushAsync(mqttPubAckMessage);

            var sendMqttMessage = Enqueue(channel, messageId, null, null, 1, ConfirmStatus.PUBREC);

            mqttChannel.AddMqttMessage(messageId, sendMqttMessage);
        }