示例#1
0
        private IEnumerable <TopicFilter> WrapTopicFilters(IEnumerable <ITopicFilter> topicFilters)
        {
            return(topicFilters.Select(tFilter =>
            {
                var tf = new TopicFilterBuilder().WithTopic(tFilter.Topic);

                switch (tFilter.QualityOfServiceLevel)
                {
                case QoSLevel.AtMostOnce:
                    tf.WithAtMostOnceQoS();
                    break;

                case QoSLevel.AtLeastOnce:
                    tf.WithAtLeastOnceQoS();
                    break;

                case QoSLevel.ExactlyOnce:
                    tf.WithExactlyOnceQoS();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                return tf.Build();
            }));
        }
示例#2
0
        private async void Subscribe_Click(object sender, EventArgs e)
        {
            if (mqttClient == null || !mqttClient.IsConnected)
            {
                return;
            }
            if (!string.IsNullOrWhiteSpace(topicSubscribe.Text))
            {
                TopicFilterBuilder builder = new TopicFilterBuilder()
                                             .WithTopic(topicSubscribe.Text);
                if (qosSubscribe.SelectedIndex == -1)
                {
                    qosSubscribe.SelectedIndex = 0;
                }
                builder.WithQualityOfServiceLevel((MqttQualityOfServiceLevel)qosSubscribe.SelectedIndex);
                try
                {
                    await mqttClient.SubscribeAsync(builder.Build());

                    if (!subscriptions.Items.Contains(topicSubscribe.Text))
                    {
                        subscriptions.Items.Add(topicSubscribe.Text);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message);
                }
            }
        }
示例#3
0
        public MqttDriver(string mqttBrokerHost, int tcpPort, IList <LoraControllerFullInfo> loraControllers, IChannelCommandManagerDriverSide <string, IInteleconCommand> commandManagerDriverSide)
        {
            _mqttBrokerHost           = mqttBrokerHost;
            _tcpPort                  = tcpPort;
            _loraControllers          = loraControllers;
            _commandManagerDriverSide = commandManagerDriverSide;
            _commandManagerDriverSide.CommandRequestAccepted += CommandManagerDriverSideOnCommandRequestAccepted;

            _lastSixsCache = new AttachedLastDataCache();

            var subscriptionList = loraControllers.GroupBy(lc => lc.RxTopicName).Select(g => g.Key);

            var topicFilters = new List <TopicFilter>();

            foreach (var topicName in subscriptionList)
            {
                Log.Log("[MQTT DRIVER] .ctor topic name to subscribe added: " + topicName);
                var tfb = new TopicFilterBuilder();
                tfb.WithTopic(topicName);
                topicFilters.Add(tfb.Build());
            }

            _topicFilters = topicFilters;
            Log.Log("[MQTT DRIVER] .ctor topics to subscribe to generated, count = " + _topicFilters.Count);

            RunAsync().Wait();

            Log.Log("[MQTT DRIVER] .ctor complete");
        }
示例#4
0
        public MqttClientSubscribeOptionsBuilder WithTopicFilter(TopicFilterBuilder topicFilterBuilder)
        {
            if (topicFilterBuilder == null)
            {
                throw new ArgumentNullException(nameof(topicFilterBuilder));
            }

            return(WithTopicFilter(topicFilterBuilder.Build()));
        }
示例#5
0
        public MQTTClient()
        {
            var mqttClient = new MqttFactory().CreateMqttClient();

            var optionBuilder = new MqttClientOptionsBuilder();

            optionBuilder
            .WithClientId("c001")
            .WithTcpServer(opts =>
            {
                opts.Server = "127.0.0.1";
                opts.Port   = 108;
            })
            .WithCredentials("u001", "p001")
            .WithCleanSession(true);

            var options = optionBuilder.Build();

            mqttClient.ConnectAsync(options, CancellationToken.None).Wait();

            var recieveHander = new MsgRecieveHandler();

            mqttClient.ApplicationMessageReceivedHandler = recieveHander;


            var topicBuilder = new TopicFilterBuilder();

            topicBuilder.WithTopic("家/客厅/空调/#")
            .WithAtMostOnceQoS();
            var topicHome = topicBuilder.Build();

            var subscribOptionBuilder = new MqttClientSubscribeOptionsBuilder();

            subscribOptionBuilder.WithTopicFilter(topicHome);

            var subOpt = subscribOptionBuilder.Build();

            mqttClient.SubscribeAsync(subOpt, CancellationToken.None).Wait();

            var appMsg = new MqttApplicationMessage();

            appMsg.Topic   = "家/客厅/空调/开关";
            appMsg.Payload = Encoding.UTF8.GetBytes("我来了~");
            appMsg.QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce;
            appMsg.Retain = false;


            mqttClient.PublishAsync(appMsg, CancellationToken.None).Wait();
            //var appMsg = new MqttApplicationMessage("家/客厅/空调/开关",
            //    Encoding.UTF8.GetBytes("消息内容"),
            //    MqttQualityOfServiceLevel.AtMostOnce, false);
        }
示例#6
0
        /// <summary>
        /// TODO su
        /// </summary>
        /// <param name="topics"></param>
        /// <returns></returns>
        public async Task SubscribeAsync(IEnumerable <MQTTTopicConfiguration> topics)
        {
            var returnList = new List <MQTTTopicConfiguration>();
            var errorList  = new List <Error>();


            var topicBuilder = new TopicFilterBuilder();

            foreach (var topic in topics)
            {
                topicBuilder.WithTopic(topic.Name).WithQualityOfServiceLevel((MqttQualityOfServiceLevel)topic.QoS);
            }
            var result = await _client.SubscribeAsync(topicBuilder.Build());
        }
示例#7
0
 public async Task SubscribeMessage(IMqttClient mqttClient, TopicFilterBuilder topicFilterBuilder)
 {
     //var a = new TopicFilterBuilder().WithTopic("").WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce);
     await mqttClient.SubscribeAsync(topicFilterBuilder.Build());
 }