Example #1
0
        public Task <MqttClientPublishResult> PublishAsync(MqttApplicationMessage applicationMessage, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            MqttTopicValidator.ThrowIfInvalid(applicationMessage);

            ThrowIfDisposed();
            ThrowIfNotConnected();

            var publishPacket = _adapter.PacketFormatterAdapter.DataConverter.CreatePublishPacket(applicationMessage);

            switch (applicationMessage.QualityOfServiceLevel)
            {
            case MqttQualityOfServiceLevel.AtMostOnce:
            {
                return(PublishAtMostOnce(publishPacket, cancellationToken));
            }

            case MqttQualityOfServiceLevel.AtLeastOnce:
            {
                return(PublishAtLeastOnceAsync(publishPacket, cancellationToken));
            }

            case MqttQualityOfServiceLevel.ExactlyOnce:
            {
                return(PublishExactlyOnceAsync(publishPacket, cancellationToken));
            }

            default:
            {
                throw new NotSupportedException();
            }
            }
        }
Example #2
0
        public async Task <MqttClientSubscribeResult> SubscribeAsync(MqttClientSubscribeOptions options, CancellationToken cancellationToken)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            foreach (var topicFilter in options.TopicFilters)
            {
                MqttTopicValidator.ThrowIfInvalidSubscribe(topicFilter.Topic);
            }

            ThrowIfDisposed();
            ThrowIfNotConnected();

            var subscribePacket = _adapter.PacketFormatterAdapter.DataConverter.CreateSubscribePacket(options);

            subscribePacket.PacketIdentifier = _packetIdentifierProvider.GetNextPacketIdentifier();

            var subAckPacket = await SendAndReceiveAsync <MqttSubAckPacket>(subscribePacket, cancellationToken).ConfigureAwait(false);

            return(_adapter.PacketFormatterAdapter.DataConverter.CreateClientSubscribeResult(subscribePacket, subAckPacket));
        }
Example #3
0
 public void Invalid_Topic_Empty()
 {
     MqttTopicValidator.ThrowIfInvalidSubscribe(string.Empty);
 }
Example #4
0
 public void Invalid_Topic_Hash_In_Between()
 {
     MqttTopicValidator.ThrowIfInvalidSubscribe("/a/#/c");
 }
Example #5
0
 public void Valid_Topic_Only_Hash()
 {
     MqttTopicValidator.ThrowIfInvalidSubscribe("#");
 }
Example #6
0
 public void Valid_Topic_Hash_Last_Char()
 {
     MqttTopicValidator.ThrowIfInvalidSubscribe("/a/#");
 }
Example #7
0
 public void Valid_Topic_Plus_In_Between()
 {
     MqttTopicValidator.ThrowIfInvalidSubscribe("/a/+/c");
 }
Example #8
0
 public void Valid_Topic()
 {
     MqttTopicValidator.ThrowIfInvalidSubscribe("/a/b/c");
 }
 public void Invalid_Topic_Hash()
 {
     MqttTopicValidator.ThrowIfInvalid("/a/#/c");
 }
 public void Invalid_Topic_Plus()
 {
     MqttTopicValidator.ThrowIfInvalid("/a/+/c");
 }