Esempio n. 1
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");
        }
Esempio n. 2
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);
        }
Esempio n. 3
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());
        }